Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / networkVisualiserPlanet.js

Displaying Raw • Download


meshchatx/src/frontend/js/networkVisualiserPlanet.js HEAD (96b397dc) Text, 34.58 KB

T8b949e// SPDX-License-Identifier: 0BSD

T8b949e/**
* Planet view for the WebGL network visualiser.
* Each interface is a globe around the local node. Peers sit on the
* interface they use. Pixel draw stays in the 2D WebGL path.
*/

Tff7b72import Tb4b4b4{ Te6edf3EDGE_STRIDETb4b4b4, Te6edf3NODE_STRIDE Tb4b4b4} Tff7b72from Ta5d6ff"./networkVisualiserWebGL.js"Tb4b4b4;

Tff7b72export Tff7b72const Te6edf3PLANET_VIEW Tff7b72= Ta5d6ff"planet"Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3FLAT_VIEW Tff7b72= Ta5d6ff"flat"Tb4b4b4;

Tff7b72export Tff7b72const Te6edf3PLANET_FOV_Y Tff7b72= Tb4b4b4(T79c0ff48 Tff7b72* Tffa657MathTb4b4b4.Te6edf3PITb4b4b4) Tff7b72/ T79c0ff180Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3PLANET_NEAR Tff7b72= T79c0ff0.18Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3PLANET_FAR Tff7b72= T79c0ff40Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3PLANET_DIST_MIN Tff7b72= T79c0ff2.6Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3PLANET_DIST_MAX Tff7b72= T79c0ff16Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3PLANET_PITCH_LIMIT Tff7b72= T79c0ff1.18Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3DEFAULT_ORBIT_YAW Tff7b72= T79c0ff0.62Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3DEFAULT_ORBIT_PITCH Tff7b72= T79c0ff0.38Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3DEFAULT_ORBIT_DIST Tff7b72= T79c0ff6.2Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3LAYOUT_SCALE_FLOOR Tff7b72= T79c0ff160Tb4b4b4;
T8b949e/** Scale above max layout radius so the farthest node stays on the back hemisphere. */
Tff7b72export Tff7b72const Te6edf3LAYOUT_SCALE_FIT Tff7b72= T79c0ff1.08Tb4b4b4;
T8b949e/** Per-globe wrap floor. Live maxR below this does not retighten the map. */
Tff7b72export Tff7b72const Te6edf3PLANET_CLUSTER_SCALE_FLOOR Tff7b72= T79c0ff240Tb4b4b4;
T8b949e/** Keep a peer on its globe unless another interface is this much closer. */
Tff7b72export Tff7b72const Te6edf3PLANET_HOME_STICKY Tff7b72= T79c0ff48Tb4b4b4;
Tff7b72const Te6edf3CLIP_W_MIN Tff7b72= T79c0ff1e-3Tb4b4b4;
Tff7b72const Te6edf3SCALE_HOLD_LO Tff7b72= T79c0ff0.85Tb4b4b4;
Tff7b72const Te6edf3SCALE_HOLD_HI Tff7b72= T79c0ff1.15Tb4b4b4;

Tff7b72export Tff7b72const Te6edf3PLANET_KIND_ME Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3PLANET_KIND_IFACE_ON Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3PLANET_KIND_IFACE_OFF Tff7b72= T79c0ff2Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3PLANET_KIND_PEER Tff7b72= T79c0ff3Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3PLANET_KIND_DISCOVERED Tff7b72= T79c0ff4Tb4b4b4;

Tff7b72const Te6edf3meridians Tff7b72= T79c0ff14Tb4b4b4;
Tff7b72const Te6edf3parallels Tff7b72= T79c0ff6Tb4b4b4;
Tff7b72const Te6edf3gridSegs Tff7b72= T79c0ff18Tb4b4b4;
Tff7b72const Te6edf3ringSegs Tff7b72= T79c0ff64Tb4b4b4;

Tff7b72const Te6edf3PLANET_PALETTE Tff7b72= Tb4b4b4[
Tb4b4b4[T79c0ff0.2Tb4b4b4, T79c0ff0.48Tb4b4b4, T79c0ff0.78Tb4b4b4]Tb4b4b4,
Tb4b4b4[T79c0ff0.14Tb4b4b4, T79c0ff0.58Tb4b4b4, T79c0ff0.5Tb4b4b4]Tb4b4b4,
Tb4b4b4[T79c0ff0.48Tb4b4b4, T79c0ff0.34Tb4b4b4, T79c0ff0.7Tb4b4b4]Tb4b4b4,
Tb4b4b4[T79c0ff0.7Tb4b4b4, T79c0ff0.42Tb4b4b4, T79c0ff0.18Tb4b4b4]Tb4b4b4,
Tb4b4b4[T79c0ff0.22Tb4b4b4, T79c0ff0.55Tb4b4b4, T79c0ff0.34Tb4b4b4]Tb4b4b4,
Tb4b4b4[T79c0ff0.66Tb4b4b4, T79c0ff0.26Tb4b4b4, T79c0ff0.36Tb4b4b4]Tb4b4b4,
Tb4b4b4[T79c0ff0.22Tb4b4b4, T79c0ff0.4Tb4b4b4, T79c0ff0.56Tb4b4b4]Tb4b4b4,
Tb4b4b4[T79c0ff0.55Tb4b4b4, T79c0ff0.52Tb4b4b4, T79c0ff0.2Tb4b4b4]Tb4b4b4,
Tb4b4b4]Tb4b4b4;

T8b949e/** @type {{x1:number,y1:number,z1:number,x2:number,y2:number,z2:number}[]|null} */
Tff7b72let Te6edf3globeGridCache Tff7b72= Tff7b72nullTb4b4b4;

Tff7b72let Te6edf3nodeScratch Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3edgeScratch Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;

T8b949e/**
* @param {unknown} raw
* @returns {"flat"|"planet"}
*/
Tff7b72export Tff7b72function Te6edf3normalizeVisualiserViewModeTb4b4b4(Te6edf3rawTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3raw Tff7b72=== Te6edf3PLANET_VIEW Tff7b72? Te6edf3PLANET_VIEW Tff7b72: Te6edf3FLAT_VIEWTb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {number} kind
*/
Tff7b72export Tff7b72function Te6edf3isPlanetInterfaceKindTb4b4b4(Te6edf3kindTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3kind Tff7b72=== Te6edf3PLANET_KIND_IFACE_ON Tff7b72|| Te6edf3kind Tff7b72=== Te6edf3PLANET_KIND_IFACE_OFF Tff7b72|| Te6edf3kind Tff7b72=== Te6edf3PLANET_KIND_DISCOVEREDTb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {number} yaw
* @param {number} pitch
* @param {number} dist
*/
Tff7b72export Tff7b72function Te6edf3orbitDistFloorTb4b4b4(Te6edf3planetCountTb4b4b4) Tb4b4b4{
Tff7b72return Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3PLANET_DIST_MINTb4b4b4, Te6edf3hubRadiusForPlanetCountTb4b4b4(Te6edf3planetCountTb4b4b4) Tff7b72+ T79c0ff1.6Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3clampOrbitTb4b4b4(Te6edf3yawTb4b4b4, Te6edf3pitchTb4b4b4, Te6edf3distTb4b4b4, Te6edf3planetCountTb4b4b4) Tb4b4b4{
Tff7b72let Te6edf3y Tff7b72= Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3yawTb4b4b4) Tff7b72? Te6edf3yaw Tff7b72: Te6edf3DEFAULT_ORBIT_YAWTb4b4b4;
Tff7b72let Te6edf3p Tff7b72= Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3pitchTb4b4b4) Tff7b72? Te6edf3pitch Tff7b72: Te6edf3DEFAULT_ORBIT_PITCHTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3p Tff7b72< Tff7b72-Te6edf3PLANET_PITCH_LIMITTb4b4b4) Te6edf3p Tff7b72= Tff7b72-Te6edf3PLANET_PITCH_LIMITTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3p Tff7b72> Te6edf3PLANET_PITCH_LIMITTb4b4b4) Te6edf3p Tff7b72= Te6edf3PLANET_PITCH_LIMITTb4b4b4;
Tff7b72let Te6edf3d Tff7b72= Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3distTb4b4b4) Tff7b72&& Te6edf3dist Tff7b72> T79c0ff0 Tff7b72? Te6edf3dist Tff7b72: Te6edf3DEFAULT_ORBIT_DISTTb4b4b4;
Tff7b72const Te6edf3minD Tff7b72= Te6edf3planetCount Tff7b72!= Tff7b72null Tff7b72? Te6edf3orbitDistFloorTb4b4b4(Te6edf3planetCountTb4b4b4) Tff7b72: Te6edf3PLANET_DIST_MINTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3d Tff7b72< Te6edf3minDTb4b4b4) Te6edf3d Tff7b72= Te6edf3minDTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3d Tff7b72> Te6edf3PLANET_DIST_MAXTb4b4b4) Te6edf3d Tff7b72= Te6edf3PLANET_DIST_MAXTb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3yawTff7b72: Te6edf3yTb4b4b4, Te6edf3pitchTff7b72: Te6edf3pTb4b4b4, Te6edf3distTff7b72: Te6edf3d Tb4b4b4}Tb4b4b4;
Tb4b4b4}

T8b949e/**
* Max layout radius used to wrap a cluster onto a sphere.
* @param {Float32Array|number[]|null|undefined} nodes
* @param {number} stride
*/
Tff7b72export Tff7b72function Te6edf3computeLayoutScaleTb4b4b4(Te6edf3nodesTb4b4b4, Te6edf3stride Tff7b72= Te6edf3NODE_STRIDETb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3step Tff7b72= Te6edf3stride Tff7b72> T79c0ff0 Tff7b72? Te6edf3stride Tff7b72: Te6edf3NODE_STRIDETb4b4b4;
Tff7b72const Te6edf3n Tff7b72= Te6edf3nodes Tff7b72&& Te6edf3nodesTb4b4b4.Te6edf3length Tff7b72? Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3nodesTb4b4b4.Te6edf3length Tff7b72/ Te6edf3stepTb4b4b4) Tff7b72: T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3maxR Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3nTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3o Tff7b72= Te6edf3i Tff7b72* Te6edf3stepTb4b4b4;
Tff7b72const Te6edf3r Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3nodesTb4b4b4[Te6edf3oTb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4, Te6edf3nodesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3r Tff7b72> Te6edf3maxRTb4b4b4) Te6edf3maxR Tff7b72= Te6edf3rTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3maxR Tff7b72* Te6edf3LAYOUT_SCALE_FITTb4b4b4, Te6edf3LAYOUT_SCALE_FLOORTb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {number} x
* @param {number} y
* @param {number} layoutScale
* @returns {{x:number,y:number,z:number,theta:number,phi:number}}
*/
Tff7b72export Tff7b72function Te6edf3layoutToSphereTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3layoutScaleTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3scale Tff7b72= Te6edf3layoutScale Tff7b72> T79c0ff1e-6 Tff7b72? Te6edf3layoutScale Tff7b72: Te6edf3LAYOUT_SCALE_FLOORTb4b4b4;
Tff7b72const Te6edf3lx Tff7b72= Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3xTb4b4b4) Tff7b72? Te6edf3x Tff7b72: T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3ly Tff7b72= Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3yTb4b4b4) Tff7b72? Te6edf3y Tff7b72: T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3theta Tff7b72= Tffa657MathTb4b4b4.Te6edf3atan2Tb4b4b4(Te6edf3lyTb4b4b4, Te6edf3lxTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3r Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3lxTb4b4b4, Te6edf3lyTb4b4b4) Tff7b72/ Te6edf3scaleTb4b4b4;
Tff7b72const Te6edf3phi Tff7b72= Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(Te6edf3rTb4b4b4, T79c0ff1Tb4b4b4) Tff7b72* Tffa657MathTb4b4b4.Te6edf3PITb4b4b4;
Tff7b72const Te6edf3sp Tff7b72= Tffa657MathTb4b4b4.Te6edf3sinTb4b4b4(Te6edf3phiTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3xTff7b72: Te6edf3sp Tff7b72* Tffa657MathTb4b4b4.Te6edf3cosTb4b4b4(Te6edf3thetaTb4b4b4)Tb4b4b4,
Te6edf3yTff7b72: Te6edf3sp Tff7b72* Tffa657MathTb4b4b4.Te6edf3sinTb4b4b4(Te6edf3thetaTb4b4b4)Tb4b4b4,
Te6edf3zTff7b72: Tffa657MathTb4b4b4.Te6edf3cosTb4b4b4(Te6edf3phiTb4b4b4)Tb4b4b4,
Te6edf3thetaTb4b4b4,
Te6edf3phiTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}

T8b949e/**
* Inverse of layoutToSphere. Point should lie on the unit sphere.
*/
Tff7b72export Tff7b72function Te6edf3sphereToLayoutTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3zTb4b4b4, Te6edf3layoutScaleTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3scale Tff7b72= Te6edf3layoutScale Tff7b72> T79c0ff1e-6 Tff7b72? Te6edf3layoutScale Tff7b72: Te6edf3LAYOUT_SCALE_FLOORTb4b4b4;
Tff7b72const Te6edf3len Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3zTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3len Tff7b72< T79c0ff1e-8Tb4b4b4) Tff7b72return Tb4b4b4{ Te6edf3xTff7b72: T79c0ff0Tb4b4b4, Te6edf3yTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3nx Tff7b72= Te6edf3x Tff7b72/ Te6edf3lenTb4b4b4;
Tff7b72const Te6edf3ny Tff7b72= Te6edf3y Tff7b72/ Te6edf3lenTb4b4b4;
Tff7b72const Te6edf3nz Tff7b72= Te6edf3z Tff7b72/ Te6edf3lenTb4b4b4;
Tff7b72const Te6edf3phi Tff7b72= Tffa657MathTb4b4b4.Te6edf3acosTb4b4b4(Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72-T79c0ff1Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3nzTb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3theta Tff7b72= Tffa657MathTb4b4b4.Te6edf3atan2Tb4b4b4(Te6edf3nyTb4b4b4, Te6edf3nxTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3r Tff7b72= Tb4b4b4(Te6edf3phi Tff7b72/ Tffa657MathTb4b4b4.Te6edf3PITb4b4b4) Tff7b72* Te6edf3scaleTb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3xTff7b72: Te6edf3r Tff7b72* Tffa657MathTb4b4b4.Te6edf3cosTb4b4b4(Te6edf3thetaTb4b4b4)Tb4b4b4, Te6edf3yTff7b72: Te6edf3r Tff7b72* Tffa657MathTb4b4b4.Te6edf3sinTb4b4b4(Te6edf3thetaTb4b4b4) Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3orbitEyeTb4b4b4(Te6edf3yawTb4b4b4, Te6edf3pitchTb4b4b4, Te6edf3distTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3cp Tff7b72= Tffa657MathTb4b4b4.Te6edf3cosTb4b4b4(Te6edf3pitchTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3xTff7b72: Te6edf3dist Tff7b72* Te6edf3cp Tff7b72* Tffa657MathTb4b4b4.Te6edf3sinTb4b4b4(Te6edf3yawTb4b4b4)Tb4b4b4,
Te6edf3yTff7b72: Te6edf3dist Tff7b72* Tffa657MathTb4b4b4.Te6edf3sinTb4b4b4(Te6edf3pitchTb4b4b4)Tb4b4b4,
Te6edf3zTff7b72: Te6edf3dist Tff7b72* Te6edf3cp Tff7b72* Tffa657MathTb4b4b4.Te6edf3cosTb4b4b4(Te6edf3yawTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3cameraBasisTb4b4b4(Te6edf3eyeTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3fl Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3eyeTb4b4b4.Te6edf3xTb4b4b4, Te6edf3eyeTb4b4b4.Te6edf3yTb4b4b4, Te6edf3eyeTb4b4b4.Te6edf3zTb4b4b4) Tff7b72|| T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3forward Tff7b72= Tb4b4b4{ Te6edf3xTff7b72: Tff7b72-Te6edf3eyeTb4b4b4.Te6edf3x Tff7b72/ Te6edf3flTb4b4b4, Te6edf3yTff7b72: Tff7b72-Te6edf3eyeTb4b4b4.Te6edf3y Tff7b72/ Te6edf3flTb4b4b4, Te6edf3zTff7b72: Tff7b72-Te6edf3eyeTb4b4b4.Te6edf3z Tff7b72/ Te6edf3fl Tb4b4b4}Tb4b4b4;
Tff7b72let Te6edf3cx Tff7b72= Te6edf3forwardTb4b4b4.Te6edf3y Tff7b72* T79c0ff0 Tff7b72- Te6edf3forwardTb4b4b4.Te6edf3z Tff7b72* T79c0ff1Tb4b4b4;
Tff7b72let Te6edf3cy Tff7b72= Te6edf3forwardTb4b4b4.Te6edf3z Tff7b72* T79c0ff0 Tff7b72- Te6edf3forwardTb4b4b4.Te6edf3x Tff7b72* T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3cz Tff7b72= Te6edf3forwardTb4b4b4.Te6edf3x Tff7b72* T79c0ff1 Tff7b72- Te6edf3forwardTb4b4b4.Te6edf3y Tff7b72* T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3rl Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3cxTb4b4b4, Te6edf3cyTb4b4b4, Te6edf3czTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3rl Tff7b72< T79c0ff1e-6Tb4b4b4) Tb4b4b4{
Te6edf3cx Tff7b72= T79c0ff1Tb4b4b4;
Te6edf3cy Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3cz Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3rl Tff7b72= T79c0ff1Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3right Tff7b72= Tb4b4b4{ Te6edf3xTff7b72: Te6edf3cx Tff7b72/ Te6edf3rlTb4b4b4, Te6edf3yTff7b72: Te6edf3cy Tff7b72/ Te6edf3rlTb4b4b4, Te6edf3zTff7b72: Te6edf3cz Tff7b72/ Te6edf3rl Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3up Tff7b72= Tb4b4b4{
Te6edf3xTff7b72: Te6edf3rightTb4b4b4.Te6edf3y Tff7b72* Te6edf3forwardTb4b4b4.Te6edf3z Tff7b72- Te6edf3rightTb4b4b4.Te6edf3z Tff7b72* Te6edf3forwardTb4b4b4.Te6edf3yTb4b4b4,
Te6edf3yTff7b72: Te6edf3rightTb4b4b4.Te6edf3z Tff7b72* Te6edf3forwardTb4b4b4.Te6edf3x Tff7b72- Te6edf3rightTb4b4b4.Te6edf3x Tff7b72* Te6edf3forwardTb4b4b4.Te6edf3zTb4b4b4,
Te6edf3zTff7b72: Te6edf3rightTb4b4b4.Te6edf3x Tff7b72* Te6edf3forwardTb4b4b4.Te6edf3y Tff7b72- Te6edf3rightTb4b4b4.Te6edf3y Tff7b72* Te6edf3forwardTb4b4b4.Te6edf3xTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3forwardTb4b4b4, Te6edf3rightTb4b4b4, Te6edf3up Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3lookAtOriginTb4b4b4(Te6edf3eyeTb4b4b4) Tb4b4b4{
Tff7b72const Tb4b4b4{ Te6edf3forwardTb4b4b4, Te6edf3rightTb4b4b4, Te6edf3up Tb4b4b4} Tff7b72= Te6edf3cameraBasisTb4b4b4(Te6edf3eyeTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3out Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4;
Te6edf3outTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= Te6edf3rightTb4b4b4.Te6edf3xTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= Te6edf3upTb4b4b4.Te6edf3xTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72= Tff7b72-Te6edf3forwardTb4b4b4.Te6edf3xTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff3Tb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3outTb4b4b4[T79c0ff4Tb4b4b4] Tff7b72= Te6edf3rightTb4b4b4.Te6edf3yTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff5Tb4b4b4] Tff7b72= Te6edf3upTb4b4b4.Te6edf3yTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff6Tb4b4b4] Tff7b72= Tff7b72-Te6edf3forwardTb4b4b4.Te6edf3yTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff7Tb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3outTb4b4b4[T79c0ff8Tb4b4b4] Tff7b72= Te6edf3rightTb4b4b4.Te6edf3zTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff9Tb4b4b4] Tff7b72= Te6edf3upTb4b4b4.Te6edf3zTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff10Tb4b4b4] Tff7b72= Tff7b72-Te6edf3forwardTb4b4b4.Te6edf3zTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff11Tb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3outTb4b4b4[T79c0ff12Tb4b4b4] Tff7b72= Tff7b72-Tb4b4b4(Te6edf3rightTb4b4b4.Te6edf3x Tff7b72* Te6edf3eyeTb4b4b4.Te6edf3x Tff7b72+ Te6edf3rightTb4b4b4.Te6edf3y Tff7b72* Te6edf3eyeTb4b4b4.Te6edf3y Tff7b72+ Te6edf3rightTb4b4b4.Te6edf3z Tff7b72* Te6edf3eyeTb4b4b4.Te6edf3zTb4b4b4)Tb4b4b4;
Te6edf3outTb4b4b4[T79c0ff13Tb4b4b4] Tff7b72= Tff7b72-Tb4b4b4(Te6edf3upTb4b4b4.Te6edf3x Tff7b72* Te6edf3eyeTb4b4b4.Te6edf3x Tff7b72+ Te6edf3upTb4b4b4.Te6edf3y Tff7b72* Te6edf3eyeTb4b4b4.Te6edf3y Tff7b72+ Te6edf3upTb4b4b4.Te6edf3z Tff7b72* Te6edf3eyeTb4b4b4.Te6edf3zTb4b4b4)Tb4b4b4;
Te6edf3outTb4b4b4[T79c0ff14Tb4b4b4] Tff7b72= Te6edf3forwardTb4b4b4.Te6edf3x Tff7b72* Te6edf3eyeTb4b4b4.Te6edf3x Tff7b72+ Te6edf3forwardTb4b4b4.Te6edf3y Tff7b72* Te6edf3eyeTb4b4b4.Te6edf3y Tff7b72+ Te6edf3forwardTb4b4b4.Te6edf3z Tff7b72* Te6edf3eyeTb4b4b4.Te6edf3zTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff15Tb4b4b4] Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72return Te6edf3outTb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3perspectiveTb4b4b4(Te6edf3fovYTb4b4b4, Te6edf3aspectTb4b4b4, Te6edf3nearTb4b4b4, Te6edf3farTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3out Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3f Tff7b72= T79c0ff1 Tff7b72/ Tffa657MathTb4b4b4.Te6edf3tanTb4b4b4(Te6edf3fovY Tff7b72* T79c0ff0.5Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3a Tff7b72= Te6edf3aspect Tff7b72> T79c0ff1e-6 Tff7b72? Te6edf3aspect Tff7b72: T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3nf Tff7b72= T79c0ff1 Tff7b72/ Tb4b4b4(Te6edf3near Tff7b72- Te6edf3farTb4b4b4)Tb4b4b4;
Te6edf3outTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= Te6edf3f Tff7b72/ Te6edf3aTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff5Tb4b4b4] Tff7b72= Te6edf3fTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff10Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3far Tff7b72+ Te6edf3nearTb4b4b4) Tff7b72* Te6edf3nfTb4b4b4;
Te6edf3outTb4b4b4[T79c0ff11Tb4b4b4] Tff7b72= Tff7b72-T79c0ff1Tb4b4b4;
Te6edf3outTb4b4b4[T79c0ff14Tb4b4b4] Tff7b72= T79c0ff2 Tff7b72* Te6edf3far Tff7b72* Te6edf3near Tff7b72* Te6edf3nfTb4b4b4;
Tff7b72return Te6edf3outTb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3mat4MultiplyTb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3out Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3col Tff7b72= T79c0ff0Tb4b4b4; Te6edf3col Tff7b72< T79c0ff4Tb4b4b4; Te6edf3colTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3b0 Tff7b72= Te6edf3bTb4b4b4[Te6edf3col Tff7b72* T79c0ff4Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3b1 Tff7b72= Te6edf3bTb4b4b4[Te6edf3col Tff7b72* T79c0ff4 Tff7b72+ T79c0ff1Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3b2 Tff7b72= Te6edf3bTb4b4b4[Te6edf3col Tff7b72* T79c0ff4 Tff7b72+ T79c0ff2Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3b3 Tff7b72= Te6edf3bTb4b4b4[Te6edf3col Tff7b72* T79c0ff4 Tff7b72+ T79c0ff3Tb4b4b4]Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3col Tff7b72* T79c0ff4Tb4b4b4] Tff7b72= Te6edf3aTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72* Te6edf3b0 Tff7b72+ Te6edf3aTb4b4b4[T79c0ff4Tb4b4b4] Tff7b72* Te6edf3b1 Tff7b72+ Te6edf3aTb4b4b4[T79c0ff8Tb4b4b4] Tff7b72* Te6edf3b2 Tff7b72+ Te6edf3aTb4b4b4[T79c0ff12Tb4b4b4] Tff7b72* Te6edf3b3Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3col Tff7b72* T79c0ff4 Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72= Te6edf3aTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72* Te6edf3b0 Tff7b72+ Te6edf3aTb4b4b4[T79c0ff5Tb4b4b4] Tff7b72* Te6edf3b1 Tff7b72+ Te6edf3aTb4b4b4[T79c0ff9Tb4b4b4] Tff7b72* Te6edf3b2 Tff7b72+ Te6edf3aTb4b4b4[T79c0ff13Tb4b4b4] Tff7b72* Te6edf3b3Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3col Tff7b72* T79c0ff4 Tff7b72+ T79c0ff2Tb4b4b4] Tff7b72= Te6edf3aTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72* Te6edf3b0 Tff7b72+ Te6edf3aTb4b4b4[T79c0ff6Tb4b4b4] Tff7b72* Te6edf3b1 Tff7b72+ Te6edf3aTb4b4b4[T79c0ff10Tb4b4b4] Tff7b72* Te6edf3b2 Tff7b72+ Te6edf3aTb4b4b4[T79c0ff14Tb4b4b4] Tff7b72* Te6edf3b3Tb4b4b4;
Te6edf3outTb4b4b4[Te6edf3col Tff7b72* T79c0ff4 Tff7b72+ T79c0ff3Tb4b4b4] Tff7b72= Te6edf3aTb4b4b4[T79c0ff3Tb4b4b4] Tff7b72* Te6edf3b0 Tff7b72+ Te6edf3aTb4b4b4[T79c0ff7Tb4b4b4] Tff7b72* Te6edf3b1 Tff7b72+ Te6edf3aTb4b4b4[T79c0ff11Tb4b4b4] Tff7b72* Te6edf3b2 Tff7b72+ Te6edf3aTb4b4b4[T79c0ff15Tb4b4b4] Tff7b72* Te6edf3b3Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3outTb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3transformPointTb4b4b4(Te6edf3mTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3zTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3xTff7b72: Te6edf3mTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72* Te6edf3x Tff7b72+ Te6edf3mTb4b4b4[T79c0ff4Tb4b4b4] Tff7b72* Te6edf3y Tff7b72+ Te6edf3mTb4b4b4[T79c0ff8Tb4b4b4] Tff7b72* Te6edf3z Tff7b72+ Te6edf3mTb4b4b4[T79c0ff12Tb4b4b4]Tb4b4b4,
Te6edf3yTff7b72: Te6edf3mTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72* Te6edf3x Tff7b72+ Te6edf3mTb4b4b4[T79c0ff5Tb4b4b4] Tff7b72* Te6edf3y Tff7b72+ Te6edf3mTb4b4b4[T79c0ff9Tb4b4b4] Tff7b72* Te6edf3z Tff7b72+ Te6edf3mTb4b4b4[T79c0ff13Tb4b4b4]Tb4b4b4,
Te6edf3zTff7b72: Te6edf3mTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72* Te6edf3x Tff7b72+ Te6edf3mTb4b4b4[T79c0ff6Tb4b4b4] Tff7b72* Te6edf3y Tff7b72+ Te6edf3mTb4b4b4[T79c0ff10Tb4b4b4] Tff7b72* Te6edf3z Tff7b72+ Te6edf3mTb4b4b4[T79c0ff14Tb4b4b4]Tb4b4b4,
Te6edf3wTff7b72: Te6edf3mTb4b4b4[T79c0ff3Tb4b4b4] Tff7b72* Te6edf3x Tff7b72+ Te6edf3mTb4b4b4[T79c0ff7Tb4b4b4] Tff7b72* Te6edf3y Tff7b72+ Te6edf3mTb4b4b4[T79c0ff11Tb4b4b4] Tff7b72* Te6edf3z Tff7b72+ Te6edf3mTb4b4b4[T79c0ff15Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}

T8b949e/**
* Front of a unit sphere at the origin when dot(p, eye) > 1.
*/
Tff7b72export Tff7b72function Te6edf3sphereFacingTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3pzTb4b4b4, Te6edf3eyeTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3px Tff7b72* Te6edf3eyeTb4b4b4.Te6edf3x Tff7b72+ Te6edf3py Tff7b72* Te6edf3eyeTb4b4b4.Te6edf3y Tff7b72+ Te6edf3pz Tff7b72* Te6edf3eyeTb4b4b4.Te6edf3z Tff7b72- T79c0ff1Tb4b4b4;
Tb4b4b4}

T8b949e/**
* Front of a sphere at C with radius R. n is the unit local point.
*/
Tff7b72export Tff7b72function Te6edf3sphereFacingAtTb4b4b4(Te6edf3nxTb4b4b4, Te6edf3nyTb4b4b4, Te6edf3nzTb4b4b4, Te6edf3eyeTb4b4b4, Te6edf3cxTb4b4b4, Te6edf3cyTb4b4b4, Te6edf3czTb4b4b4, Te6edf3radiusTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3r Tff7b72= Te6edf3radius Tff7b72> T79c0ff1e-6 Tff7b72? Te6edf3radius Tff7b72: T79c0ff1Tb4b4b4;
Tff7b72return Te6edf3nx Tff7b72* Tb4b4b4(Te6edf3eyeTb4b4b4.Te6edf3x Tff7b72- Te6edf3cxTb4b4b4) Tff7b72+ Te6edf3ny Tff7b72* Tb4b4b4(Te6edf3eyeTb4b4b4.Te6edf3y Tff7b72- Te6edf3cyTb4b4b4) Tff7b72+ Te6edf3nz Tff7b72* Tb4b4b4(Te6edf3eyeTb4b4b4.Te6edf3z Tff7b72- Te6edf3czTb4b4b4) Tff7b72- Te6edf3rTb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3clipToScreenTb4b4b4(Te6edf3clipXTb4b4b4, Te6edf3clipYTb4b4b4, Te6edf3clipWTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Tffa657MathTb4b4b4.Te6edf3absTb4b4b4(Te6edf3clipWTb4b4b4) Tff7b72> T79c0ff1e-8Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Te6edf3xTff7b72: Te6edf3width Tff7b72* T79c0ff0.5Tb4b4b4, Te6edf3yTff7b72: Te6edf3height Tff7b72* T79c0ff0.5Tb4b4b4, Te6edf3okTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3ndcX Tff7b72= Te6edf3clipX Tff7b72/ Te6edf3clipWTb4b4b4;
Tff7b72const Te6edf3ndcY Tff7b72= Te6edf3clipY Tff7b72/ Te6edf3clipWTb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3xTff7b72: Tb4b4b4(Te6edf3ndcX Tff7b72* T79c0ff0.5 Tff7b72+ T79c0ff0.5Tb4b4b4) Tff7b72* Te6edf3widthTb4b4b4,
Te6edf3yTff7b72: Tb4b4b4(T79c0ff1 Tff7b72- Tb4b4b4(Te6edf3ndcY Tff7b72* T79c0ff0.5 Tff7b72+ T79c0ff0.5Tb4b4b4)Tb4b4b4) Tff7b72* Te6edf3heightTb4b4b4,
Te6edf3okTff7b72: Te6edf3clipW Tff7b72> T79c0ff0Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}

T8b949e/**
* Clip a clip-space segment so both ends have w >= wMin.
* Drops segments entirely behind the camera.
*/
Tff7b72export Tff7b72function Te6edf3clipLineToPositiveWTb4b4b4(Te6edf3c1Tb4b4b4, Te6edf3c2Tb4b4b4, Te6edf3wMin Tff7b72= Te6edf3CLIP_W_MINTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3c1 Tff7b72|| Tff7b72!Te6edf3c2Tb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3minW Tff7b72= Te6edf3wMin Tff7b72> T79c0ff0 Tff7b72? Te6edf3wMin Tff7b72: Te6edf3CLIP_W_MINTb4b4b4;
Tff7b72const Te6edf3aIn Tff7b72= Te6edf3c1Tb4b4b4.Te6edf3w Tff7b72>= Te6edf3minWTb4b4b4;
Tff7b72const Te6edf3bIn Tff7b72= Te6edf3c2Tb4b4b4.Te6edf3w Tff7b72>= Te6edf3minWTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3aIn Tff7b72&& Te6edf3bInTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Te6edf3x1Tff7b72: Te6edf3c1Tb4b4b4.Te6edf3xTb4b4b4, Te6edf3y1Tff7b72: Te6edf3c1Tb4b4b4.Te6edf3yTb4b4b4, Te6edf3w1Tff7b72: Te6edf3c1Tb4b4b4.Te6edf3wTb4b4b4, Te6edf3x2Tff7b72: Te6edf3c2Tb4b4b4.Te6edf3xTb4b4b4, Te6edf3y2Tff7b72: Te6edf3c2Tb4b4b4.Te6edf3yTb4b4b4, Te6edf3w2Tff7b72: Te6edf3c2Tb4b4b4.Te6edf3w Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3aIn Tff7b72&& Tff7b72!Te6edf3bInTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3dw Tff7b72= Te6edf3c2Tb4b4b4.Te6edf3w Tff7b72- Te6edf3c1Tb4b4b4.Te6edf3wTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Tffa657MathTb4b4b4.Te6edf3absTb4b4b4(Te6edf3dwTb4b4b4) Tff7b72> T79c0ff1e-12Tb4b4b4)Tb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3t Tff7b72= Tb4b4b4(Te6edf3minW Tff7b72- Te6edf3c1Tb4b4b4.Te6edf3wTb4b4b4) Tff7b72/ Te6edf3dwTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3tTb4b4b4) Tff7b72|| Te6edf3t Tff7b72< T79c0ff0 Tff7b72|| Te6edf3t Tff7b72> T79c0ff1Tb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3mx Tff7b72= Te6edf3c1Tb4b4b4.Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3c2Tb4b4b4.Te6edf3x Tff7b72- Te6edf3c1Tb4b4b4.Te6edf3xTb4b4b4) Tff7b72* Te6edf3tTb4b4b4;
Tff7b72const Te6edf3my Tff7b72= Te6edf3c1Tb4b4b4.Te6edf3y Tff7b72+ Tb4b4b4(Te6edf3c2Tb4b4b4.Te6edf3y Tff7b72- Te6edf3c1Tb4b4b4.Te6edf3yTb4b4b4) Tff7b72* Te6edf3tTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3aInTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Te6edf3x1Tff7b72: Te6edf3mxTb4b4b4, Te6edf3y1Tff7b72: Te6edf3myTb4b4b4, Te6edf3w1Tff7b72: Te6edf3minWTb4b4b4, Te6edf3x2Tff7b72: Te6edf3c2Tb4b4b4.Te6edf3xTb4b4b4, Te6edf3y2Tff7b72: Te6edf3c2Tb4b4b4.Te6edf3yTb4b4b4, Te6edf3w2Tff7b72: Te6edf3c2Tb4b4b4.Te6edf3w Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{ Te6edf3x1Tff7b72: Te6edf3c1Tb4b4b4.Te6edf3xTb4b4b4, Te6edf3y1Tff7b72: Te6edf3c1Tb4b4b4.Te6edf3yTb4b4b4, Te6edf3w1Tff7b72: Te6edf3c1Tb4b4b4.Te6edf3wTb4b4b4, Te6edf3x2Tff7b72: Te6edf3mxTb4b4b4, Te6edf3y2Tff7b72: Te6edf3myTb4b4b4, Te6edf3w2Tff7b72: Te6edf3minW Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3stabilizeLayoutScaleTb4b4b4(Te6edf3computedTb4b4b4, Te6edf3prevTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3next Tff7b72= Te6edf3computed Tff7b72> T79c0ff1e-6 Tff7b72? Te6edf3computed Tff7b72: Te6edf3PLANET_CLUSTER_SCALE_FLOORTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Te6edf3prev Tff7b72> T79c0ff1e-6Tb4b4b4)Tb4b4b4) Tff7b72return Te6edf3nextTb4b4b4;
Tff7b72const Te6edf3ratio Tff7b72= Te6edf3next Tff7b72/ Te6edf3prevTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3ratio Tff7b72>= Te6edf3SCALE_HOLD_LO Tff7b72&& Te6edf3ratio Tff7b72<= Te6edf3SCALE_HOLD_HITb4b4b4) Tff7b72return Te6edf3prevTb4b4b4;
Tff7b72return Te6edf3nextTb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3screenToDrawWorldTb4b4b4(Te6edf3sxTb4b4b4, Te6edf3syTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Te6edf3xTff7b72: Te6edf3sx Tff7b72- Te6edf3width Tff7b72* T79c0ff0.5Tb4b4b4, Te6edf3yTff7b72: Te6edf3sy Tff7b72- Te6edf3height Tff7b72* T79c0ff0.5 Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3projectedSphereRadiusPxTb4b4b4(Te6edf3distTb4b4b4, Te6edf3fovYTb4b4b4, Te6edf3heightTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3d Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3distTb4b4b4, T79c0ff1.001Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3ang Tff7b72= Tffa657MathTb4b4b4.Te6edf3asinTb4b4b4(Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff0.999Tb4b4b4, T79c0ff1 Tff7b72/ Te6edf3dTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3half Tff7b72= Tffa657MathTb4b4b4.Te6edf3tanTb4b4b4(Te6edf3fovY Tff7b72* T79c0ff0.5Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Te6edf3half Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4) Tff7b72return Te6edf3height Tff7b72* T79c0ff0.25Tb4b4b4;
Tff7b72return Tb4b4b4(Tffa657MathTb4b4b4.Te6edf3tanTb4b4b4(Te6edf3angTb4b4b4) Tff7b72/ Te6edf3halfTb4b4b4) Tff7b72* Tb4b4b4(Te6edf3height Tff7b72* T79c0ff0.5Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3planetLodZoomTb4b4b4(Te6edf3distTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3d Tff7b72= Te6edf3dist Tff7b72> T79c0ff0.2 Tff7b72? Te6edf3dist Tff7b72: Te6edf3DEFAULT_ORBIT_DISTTb4b4b4;
Tff7b72return Te6edf3DEFAULT_ORBIT_DIST Tff7b72/ Te6edf3dTb4b4b4;
Tb4b4b4}

Tff7b72function Te6edf3sphTb4b4b4(Te6edf3lonTb4b4b4, Te6edf3latTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3cl Tff7b72= Tffa657MathTb4b4b4.Te6edf3cosTb4b4b4(Te6edf3latTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3xTff7b72: Te6edf3cl Tff7b72* Tffa657MathTb4b4b4.Te6edf3cosTb4b4b4(Te6edf3lonTb4b4b4)Tb4b4b4, Te6edf3yTff7b72: Tffa657MathTb4b4b4.Te6edf3sinTb4b4b4(Te6edf3latTb4b4b4)Tb4b4b4, Te6edf3zTff7b72: Te6edf3cl Tff7b72* Tffa657MathTb4b4b4.Te6edf3sinTb4b4b4(Te6edf3lonTb4b4b4) Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3buildGlobeGridTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3globeGridCacheTb4b4b4) Tff7b72return Te6edf3globeGridCacheTb4b4b4;
Tff7b72const Te6edf3lines Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3meridiansTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3lon Tff7b72= Tb4b4b4(Te6edf3i Tff7b72/ Te6edf3meridiansTb4b4b4) Tff7b72* Tffa657MathTb4b4b4.Te6edf3PI Tff7b72* T79c0ff2Tb4b4b4;
Tff7b72let Te6edf3prev Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3s Tff7b72= T79c0ff0Tb4b4b4; Te6edf3s Tff7b72<= Te6edf3gridSegsTb4b4b4; Te6edf3sTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3lat Tff7b72= Tffa657MathTb4b4b4.Te6edf3PI Tff7b72/ T79c0ff2 Tff7b72- Tb4b4b4(Te6edf3s Tff7b72/ Te6edf3gridSegsTb4b4b4) Tff7b72* Tffa657MathTb4b4b4.Te6edf3PITb4b4b4;
Tff7b72const Te6edf3p Tff7b72= Te6edf3sphTb4b4b4(Te6edf3lonTb4b4b4, Te6edf3latTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prevTb4b4b4) Tb4b4b4{
Te6edf3linesTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{ Te6edf3x1Tff7b72: Te6edf3prevTb4b4b4.Te6edf3xTb4b4b4, Te6edf3y1Tff7b72: Te6edf3prevTb4b4b4.Te6edf3yTb4b4b4, Te6edf3z1Tff7b72: Te6edf3prevTb4b4b4.Te6edf3zTb4b4b4, Te6edf3x2Tff7b72: Te6edf3pTb4b4b4.Te6edf3xTb4b4b4, Te6edf3y2Tff7b72: Te6edf3pTb4b4b4.Te6edf3yTb4b4b4, Te6edf3z2Tff7b72: Te6edf3pTb4b4b4.Te6edf3z Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3prev Tff7b72= Te6edf3pTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3j Tff7b72= T79c0ff1Tb4b4b4; Te6edf3j Tff7b72<= Te6edf3parallelsTb4b4b4; Te6edf3jTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3lat Tff7b72= Tffa657MathTb4b4b4.Te6edf3PI Tff7b72/ T79c0ff2 Tff7b72- Tb4b4b4(Te6edf3j Tff7b72/ Tb4b4b4(Te6edf3parallels Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4) Tff7b72* Tffa657MathTb4b4b4.Te6edf3PITb4b4b4;
Tff7b72let Te6edf3prev Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3first Tff7b72= Te6edf3sphTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3latTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3s Tff7b72= T79c0ff1Tb4b4b4; Te6edf3s Tff7b72<= Te6edf3gridSegsTb4b4b4; Te6edf3sTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3lon Tff7b72= Tb4b4b4(Te6edf3s Tff7b72/ Te6edf3gridSegsTb4b4b4) Tff7b72* Tffa657MathTb4b4b4.Te6edf3PI Tff7b72* T79c0ff2Tb4b4b4;
Tff7b72const Te6edf3p Tff7b72= Te6edf3s Tff7b72=== Te6edf3gridSegs Tff7b72? Te6edf3first Tff7b72: Te6edf3sphTb4b4b4(Te6edf3lonTb4b4b4, Te6edf3latTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prevTb4b4b4) Tb4b4b4{
Te6edf3linesTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{ Te6edf3x1Tff7b72: Te6edf3prevTb4b4b4.Te6edf3xTb4b4b4, Te6edf3y1Tff7b72: Te6edf3prevTb4b4b4.Te6edf3yTb4b4b4, Te6edf3z1Tff7b72: Te6edf3prevTb4b4b4.Te6edf3zTb4b4b4, Te6edf3x2Tff7b72: Te6edf3pTb4b4b4.Te6edf3xTb4b4b4, Te6edf3y2Tff7b72: Te6edf3pTb4b4b4.Te6edf3yTb4b4b4, Te6edf3z2Tff7b72: Te6edf3pTb4b4b4.Te6edf3z Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3prev Tff7b72= Te6edf3pTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3globeGridCache Tff7b72= Te6edf3linesTb4b4b4;
Tff7b72return Te6edf3linesTb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3screenRayTb4b4b4(Te6edf3cssXTb4b4b4, Te6edf3cssYTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4, Te6edf3eyeTb4b4b4) Tb4b4b4{
Tff7b72const Tb4b4b4{ Te6edf3forwardTb4b4b4, Te6edf3rightTb4b4b4, Te6edf3up Tb4b4b4} Tff7b72= Te6edf3cameraBasisTb4b4b4(Te6edf3eyeTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3aspect Tff7b72= Te6edf3height Tff7b72> T79c0ff0 Tff7b72? Te6edf3width Tff7b72/ Te6edf3height Tff7b72: T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3tanHalf Tff7b72= Tffa657MathTb4b4b4.Te6edf3tanTb4b4b4(Te6edf3PLANET_FOV_Y Tff7b72* T79c0ff0.5Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3nx Tff7b72= Tb4b4b4(Te6edf3cssX Tff7b72/ Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3widthTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4) Tff7b72* T79c0ff2 Tff7b72- T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3ny Tff7b72= T79c0ff1 Tff7b72- Tb4b4b4(Te6edf3cssY Tff7b72/ Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3heightTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4) Tff7b72* T79c0ff2Tb4b4b4;
Tff7b72const Te6edf3vx Tff7b72= Te6edf3rightTb4b4b4.Te6edf3x Tff7b72* Te6edf3nx Tff7b72* Te6edf3tanHalf Tff7b72* Te6edf3aspect Tff7b72+ Te6edf3upTb4b4b4.Te6edf3x Tff7b72* Te6edf3ny Tff7b72* Te6edf3tanHalf Tff7b72+ Te6edf3forwardTb4b4b4.Te6edf3xTb4b4b4;
Tff7b72const Te6edf3vy Tff7b72= Te6edf3rightTb4b4b4.Te6edf3y Tff7b72* Te6edf3nx Tff7b72* Te6edf3tanHalf Tff7b72* Te6edf3aspect Tff7b72+ Te6edf3upTb4b4b4.Te6edf3y Tff7b72* Te6edf3ny Tff7b72* Te6edf3tanHalf Tff7b72+ Te6edf3forwardTb4b4b4.Te6edf3yTb4b4b4;
Tff7b72const Te6edf3vz Tff7b72= Te6edf3rightTb4b4b4.Te6edf3z Tff7b72* Te6edf3nx Tff7b72* Te6edf3tanHalf Tff7b72* Te6edf3aspect Tff7b72+ Te6edf3upTb4b4b4.Te6edf3z Tff7b72* Te6edf3ny Tff7b72* Te6edf3tanHalf Tff7b72+ Te6edf3forwardTb4b4b4.Te6edf3zTb4b4b4;
Tff7b72const Te6edf3len Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3vxTb4b4b4, Te6edf3vyTb4b4b4, Te6edf3vzTb4b4b4) Tff7b72|| T79c0ff1Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3originTff7b72: Te6edf3eyeTb4b4b4,
Te6edf3dirTff7b72: Tb4b4b4{ Te6edf3xTff7b72: Te6edf3vx Tff7b72/ Te6edf3lenTb4b4b4, Te6edf3yTff7b72: Te6edf3vy Tff7b72/ Te6edf3lenTb4b4b4, Te6edf3zTff7b72: Te6edf3vz Tff7b72/ Te6edf3len Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3raySphereTb4b4b4(Te6edf3originTb4b4b4, Te6edf3dirTb4b4b4, Te6edf3radius Tff7b72= T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3r2 Tff7b72= Te6edf3radius Tff7b72* Te6edf3radiusTb4b4b4;
Tff7b72const Te6edf3ox Tff7b72= Te6edf3originTb4b4b4.Te6edf3xTb4b4b4;
Tff7b72const Te6edf3oy Tff7b72= Te6edf3originTb4b4b4.Te6edf3yTb4b4b4;
Tff7b72const Te6edf3oz Tff7b72= Te6edf3originTb4b4b4.Te6edf3zTb4b4b4;
Tff7b72const Te6edf3dx Tff7b72= Te6edf3dirTb4b4b4.Te6edf3xTb4b4b4;
Tff7b72const Te6edf3dy Tff7b72= Te6edf3dirTb4b4b4.Te6edf3yTb4b4b4;
Tff7b72const Te6edf3dz Tff7b72= Te6edf3dirTb4b4b4.Te6edf3zTb4b4b4;
Tff7b72const Te6edf3b Tff7b72= Te6edf3ox Tff7b72* Te6edf3dx Tff7b72+ Te6edf3oy Tff7b72* Te6edf3dy Tff7b72+ Te6edf3oz Tff7b72* Te6edf3dzTb4b4b4;
Tff7b72const Te6edf3c Tff7b72= Te6edf3ox Tff7b72* Te6edf3ox Tff7b72+ Te6edf3oy Tff7b72* Te6edf3oy Tff7b72+ Te6edf3oz Tff7b72* Te6edf3oz Tff7b72- Te6edf3r2Tb4b4b4;
Tff7b72const Te6edf3disc Tff7b72= Te6edf3b Tff7b72* Te6edf3b Tff7b72- Te6edf3cTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3disc Tff7b72< T79c0ff0Tb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3s Tff7b72= Tffa657MathTb4b4b4.Te6edf3sqrtTb4b4b4(Te6edf3discTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3t0 Tff7b72= Tff7b72-Te6edf3b Tff7b72- Te6edf3sTb4b4b4;
Tff7b72const Te6edf3t1 Tff7b72= Tff7b72-Te6edf3b Tff7b72+ Te6edf3sTb4b4b4;
Tff7b72const Te6edf3t Tff7b72= Te6edf3t0 Tff7b72> T79c0ff1e-4 Tff7b72? Te6edf3t0 Tff7b72: Te6edf3t1 Tff7b72> T79c0ff1e-4 Tff7b72? Te6edf3t1 Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3t Tff7b72== Tff7b72nullTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3xTff7b72: Te6edf3ox Tff7b72+ Te6edf3dx Tff7b72* Te6edf3tTb4b4b4, Te6edf3yTff7b72: Te6edf3oy Tff7b72+ Te6edf3dy Tff7b72* Te6edf3tTb4b4b4, Te6edf3zTff7b72: Te6edf3oz Tff7b72+ Te6edf3dz Tff7b72* Te6edf3tTb4b4b4, Te6edf3t Tb4b4b4}Tb4b4b4;
Tb4b4b4}

T8b949e/**
* Ray vs sphere at C with radius R.
*/
Tff7b72export Tff7b72function Te6edf3raySphereAtTb4b4b4(Te6edf3originTb4b4b4, Te6edf3dirTb4b4b4, Te6edf3cxTb4b4b4, Te6edf3cyTb4b4b4, Te6edf3czTb4b4b4, Te6edf3radiusTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3hit Tff7b72= Te6edf3raySphereTb4b4b4(Tb4b4b4{ Te6edf3xTff7b72: Te6edf3originTb4b4b4.Te6edf3x Tff7b72- Te6edf3cxTb4b4b4, Te6edf3yTff7b72: Te6edf3originTb4b4b4.Te6edf3y Tff7b72- Te6edf3cyTb4b4b4, Te6edf3zTff7b72: Te6edf3originTb4b4b4.Te6edf3z Tff7b72- Te6edf3cz Tb4b4b4}Tb4b4b4, Te6edf3dirTb4b4b4, Te6edf3radiusTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hitTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3xTff7b72: Te6edf3hitTb4b4b4.Te6edf3x Tff7b72+ Te6edf3cxTb4b4b4, Te6edf3yTff7b72: Te6edf3hitTb4b4b4.Te6edf3y Tff7b72+ Te6edf3cyTb4b4b4, Te6edf3zTff7b72: Te6edf3hitTb4b4b4.Te6edf3z Tff7b72+ Te6edf3czTb4b4b4, Te6edf3tTff7b72: Te6edf3hitTb4b4b4.Te6edf3t Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3hubRadiusForPlanetCountTb4b4b4(Te6edf3nTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3c Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3n Tff7b72| T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72<= T79c0ff1Tb4b4b4) Tff7b72return T79c0ff1.72Tb4b4b4;
Tff7b72return T79c0ff1.5 Tff7b72+ T79c0ff0.28 Tff7b72* Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(Te6edf3cTb4b4b4, T79c0ff8Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3planetRadiusForPeersTb4b4b4(Te6edf3nTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3c Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3n Tff7b72| T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff0.7Tb4b4b4, T79c0ff0.52 Tff7b72+ T79c0ff0.035 Tff7b72* Tffa657MathTb4b4b4.Te6edf3sqrtTb4b4b4(Te6edf3cTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/**
* Centers for n interface planets on a ring around the origin.
* First planet sits on +X so the local node stays visible on camera +Z.
*/
Tff7b72export Tff7b72function Te6edf3placePlanetCentersTb4b4b4(Te6edf3countTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3n Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3count Tff7b72| T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3R Tff7b72= Te6edf3hubRadiusForPlanetCountTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3out Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3nTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3ang Tff7b72= Te6edf3n Tff7b72=== T79c0ff1 Tff7b72? T79c0ff0 Tff7b72: Tb4b4b4(Te6edf3i Tff7b72/ Te6edf3nTb4b4b4) Tff7b72* Tffa657MathTb4b4b4.Te6edf3PI Tff7b72* T79c0ff2Tb4b4b4;
Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3cxTff7b72: Te6edf3R Tff7b72* Tffa657MathTb4b4b4.Te6edf3cosTb4b4b4(Te6edf3angTb4b4b4)Tb4b4b4,
Te6edf3cyTff7b72: Te6edf3n Tff7b72=== T79c0ff1 Tff7b72? T79c0ff0.12 Tff7b72: T79c0ff0.16 Tff7b72* Tffa657MathTb4b4b4.Te6edf3sinTb4b4b4(Te6edf3i Tff7b72* T79c0ff2.15 Tff7b72+ T79c0ff0.35Tb4b4b4)Tb4b4b4,
Te6edf3czTff7b72: Te6edf3R Tff7b72* Tffa657MathTb4b4b4.Te6edf3sinTb4b4b4(Te6edf3angTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3outTb4b4b4;
Tb4b4b4}

Tff7b72function Te6edf3kindOfTb4b4b4(Te6edf3iTb4b4b4, Te6edf3kindByIndexTb4b4b4, Te6edf3idByIndexTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3kindByIndex Tff7b72&& Te6edf3kindByIndexTb4b4b4[Te6edf3iTb4b4b4] Tff7b72!= Tff7b72null Tff7b72&& Te6edf3kindByIndexTb4b4b4[Te6edf3iTb4b4b4] Tff7b72!== Ta5d6ff""Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3kindByIndexTb4b4b4[Te6edf3iTb4b4b4] Tff7b72| T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3id Tff7b72= Te6edf3idByIndex Tff7b72&& Te6edf3idByIndexTb4b4b4[Te6edf3iTb4b4b4] Tff7b72!= Tff7b72null Tff7b72? Tffa657StringTb4b4b4(Te6edf3idByIndexTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4) Tff7b72: Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3id Tff7b72=== Ta5d6ff"me"Tb4b4b4) Tff7b72return Te6edf3PLANET_KIND_METb4b4b4;
Tff7b72return Te6edf3PLANET_KIND_PEERTb4b4b4;
Tb4b4b4}

T8b949e/**
* Map each node to an interface planet. Me is the hub (home -1).
* With no interfaces, leftover peers share one fallback planet.
*
* @returns {{
* ifaceIndices: number[],
* home: Int16Array,
* fallback: boolean,
* }}
*/
Tff7b72export Tff7b72function Te6edf3assignPlanetHomesTb4b4b4(Te6edf3srcCountTb4b4b4, Te6edf3kindByIndexTb4b4b4, Te6edf3idByIndexTb4b4b4, Te6edf3nodesTb4b4b4, Te6edf3prevHomeByIdTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3home Tff7b72= Tff7b72new Tffa657Int16ArrayTb4b4b4(Te6edf3srcCountTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3ifaceIndices Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3srcCountTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Te6edf3homeTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Tff7b72-T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3k Tff7b72= Te6edf3kindOfTb4b4b4(Te6edf3iTb4b4b4, Te6edf3kindByIndexTb4b4b4, Te6edf3idByIndexTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3isPlanetInterfaceKindTb4b4b4(Te6edf3kTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3homeTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3ifaceIndicesTb4b4b4.Te6edf3lengthTb4b4b4;
Te6edf3ifaceIndicesTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3iTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3homeById Tff7b72= Tffa657ObjectTb4b4b4.Te6edf3createTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3ifaceIndicesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3srcCountTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3k Tff7b72= Te6edf3kindOfTb4b4b4(Te6edf3iTb4b4b4, Te6edf3kindByIndexTb4b4b4, Te6edf3idByIndexTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3k Tff7b72!== Te6edf3PLANET_KIND_METb4b4b4) Te6edf3homeTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{ Te6edf3ifaceIndicesTb4b4b4, Te6edf3homeTb4b4b4, Te6edf3fallbackTff7b72: Tff7b72trueTb4b4b4, Te6edf3homeById Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3ifaceIdOf Tff7b72= Tb4b4b4(Te6edf3planetIndexTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3ii Tff7b72= Te6edf3ifaceIndicesTb4b4b4[Te6edf3planetIndexTb4b4b4]Tb4b4b4;
Tff7b72return Te6edf3ii Tff7b72== Tff7b72null Tff7b72|| Te6edf3idByIndexTb4b4b4[Te6edf3iiTb4b4b4] Tff7b72== Tff7b72null Tff7b72? Ta5d6ff"" Tff7b72: Tffa657StringTb4b4b4(Te6edf3idByIndexTb4b4b4[Te6edf3iiTb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3srcCountTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3k Tff7b72= Te6edf3kindOfTb4b4b4(Te6edf3iTb4b4b4, Te6edf3kindByIndexTb4b4b4, Te6edf3idByIndexTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3k Tff7b72=== Te6edf3PLANET_KIND_ME Tff7b72|| Te6edf3isPlanetInterfaceKindTb4b4b4(Te6edf3kTb4b4b4)Tb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3o Tff7b72= Te6edf3i Tff7b72* Te6edf3NODE_STRIDETb4b4b4;
Tff7b72const Te6edf3x Tff7b72= Te6edf3nodesTb4b4b4[Te6edf3oTb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3y Tff7b72= Te6edf3nodesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3best Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3bestD Tff7b72= Tff7b72InfinityTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3p Tff7b72= T79c0ff0Tb4b4b4; Te6edf3p Tff7b72< Te6edf3ifaceIndicesTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3pTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3io Tff7b72= Te6edf3ifaceIndicesTb4b4b4[Te6edf3pTb4b4b4] Tff7b72* Te6edf3NODE_STRIDETb4b4b4;
Tff7b72const Te6edf3d Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3x Tff7b72- Tb4b4b4(Te6edf3nodesTb4b4b4[Te6edf3ioTb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3y Tff7b72- Tb4b4b4(Te6edf3nodesTb4b4b4[Te6edf3io Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3d Tff7b72< Te6edf3bestDTb4b4b4) Tb4b4b4{
Te6edf3bestD Tff7b72= Te6edf3dTb4b4b4;
Te6edf3best Tff7b72= Te6edf3pTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3id Tff7b72= Te6edf3idByIndexTb4b4b4[Te6edf3iTb4b4b4] Tff7b72!= Tff7b72null Tff7b72? Tffa657StringTb4b4b4(Te6edf3idByIndexTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4) Tff7b72: Ta5d6ff""Tb4b4b4;
Tff7b72const Te6edf3prevIfaceId Tff7b72= Te6edf3id Tff7b72&& Te6edf3prevHomeById Tff7b72? Te6edf3prevHomeByIdTb4b4b4[Te6edf3idTb4b4b4] Tff7b72: Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prevIfaceIdTb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3p Tff7b72= T79c0ff0Tb4b4b4; Te6edf3p Tff7b72< Te6edf3ifaceIndicesTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3pTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3ifaceIdOfTb4b4b4(Te6edf3pTb4b4b4) Tff7b72!== Tffa657StringTb4b4b4(Te6edf3prevIfaceIdTb4b4b4)Tb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3io Tff7b72= Te6edf3ifaceIndicesTb4b4b4[Te6edf3pTb4b4b4] Tff7b72* Te6edf3NODE_STRIDETb4b4b4;
Tff7b72const Te6edf3prevD Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3x Tff7b72- Tb4b4b4(Te6edf3nodesTb4b4b4[Te6edf3ioTb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3y Tff7b72- Tb4b4b4(Te6edf3nodesTb4b4b4[Te6edf3io Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prevD Tff7b72<= Te6edf3bestD Tff7b72+ Te6edf3PLANET_HOME_STICKYTb4b4b4) Tb4b4b4{
Te6edf3best Tff7b72= Te6edf3pTb4b4b4;
Tb4b4b4}
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3homeTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3bestTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3idTb4b4b4) Te6edf3homeByIdTb4b4b4[Te6edf3idTb4b4b4] Tff7b72= Te6edf3ifaceIdOfTb4b4b4(Te6edf3bestTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3p Tff7b72= T79c0ff0Tb4b4b4; Te6edf3p Tff7b72< Te6edf3ifaceIndicesTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3pTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3ii Tff7b72= Te6edf3ifaceIndicesTb4b4b4[Te6edf3pTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3id Tff7b72= Te6edf3idByIndexTb4b4b4[Te6edf3iiTb4b4b4] Tff7b72!= Tff7b72null Tff7b72? Tffa657StringTb4b4b4(Te6edf3idByIndexTb4b4b4[Te6edf3iiTb4b4b4]Tb4b4b4) Tff7b72: Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3idTb4b4b4) Te6edf3homeByIdTb4b4b4[Te6edf3idTb4b4b4] Tff7b72= Te6edf3idTb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{ Te6edf3ifaceIndicesTb4b4b4, Te6edf3homeTb4b4b4, Te6edf3fallbackTff7b72: Tff7b72falseTb4b4b4, Te6edf3homeById Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72function Te6edf3paletteForIdTb4b4b4(Te6edf3idTb4b4b4, Te6edf3offlineTb4b4b4, Te6edf3darkTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3s Tff7b72= Tffa657StringTb4b4b4(Te6edf3id Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3h Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3sTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Te6edf3h Tff7b72= Tb4b4b4(Te6edf3h Tff7b72* T79c0ff31 Tff7b72+ Te6edf3sTb4b4b4.Te6edf3charCodeAtTb4b4b4(Te6edf3iTb4b4b4)Tb4b4b4) Tff7b72| T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3base Tff7b72= Te6edf3PLANET_PALETTETb4b4b4[Tffa657MathTb4b4b4.Te6edf3absTb4b4b4(Te6edf3hTb4b4b4) Tff7b72% Te6edf3PLANET_PALETTETb4b4b4.Te6edf3lengthTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3dim Tff7b72= Te6edf3offline Tff7b72? T79c0ff0.48 Tff7b72: T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3lift Tff7b72= Te6edf3dark Tff7b72? T79c0ff0.0 Tff7b72: T79c0ff0.12Tb4b4b4;
Tff7b72return Tb4b4b4[Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3baseTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72* Te6edf3dim Tff7b72+ Te6edf3liftTb4b4b4)Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3baseTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72* Te6edf3dim Tff7b72+ Te6edf3liftTb4b4b4)Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3baseTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72* Te6edf3dim Tff7b72+ Te6edf3liftTb4b4b4)Tb4b4b4]Tb4b4b4;
Tb4b4b4}

T8b949e/**
* Nearest planet hit, or null.
* @param {{cx:number,cy:number,cz:number,radius:number}[]} planets
*/
Tff7b72export Tff7b72function Te6edf3raycastPlanetsTb4b4b4(Te6edf3cssXTb4b4b4, Te6edf3cssYTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4, Te6edf3eyeTb4b4b4, Te6edf3planetsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3planetsTb4b4b4) Tff7b72|| Tff7b72!Te6edf3planetsTb4b4b4.Te6edf3lengthTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3ray Tff7b72= Te6edf3screenRayTb4b4b4(Te6edf3cssXTb4b4b4, Te6edf3cssYTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4, Te6edf3eyeTb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3best Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3planetsTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3p Tff7b72= Te6edf3planetsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3hit Tff7b72= Te6edf3raySphereAtTb4b4b4(Te6edf3rayTb4b4b4.Te6edf3originTb4b4b4, Te6edf3rayTb4b4b4.Te6edf3dirTb4b4b4, Te6edf3pTb4b4b4.Te6edf3cxTb4b4b4, Te6edf3pTb4b4b4.Te6edf3cyTb4b4b4, Te6edf3pTb4b4b4.Te6edf3czTb4b4b4, Te6edf3pTb4b4b4.Te6edf3radiusTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hitTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3best Tff7b72|| Te6edf3hitTb4b4b4.Te6edf3t Tff7b72< Te6edf3bestTb4b4b4.Te6edf3tTb4b4b4) Tb4b4b4{
Te6edf3best Tff7b72= Tb4b4b4{ Tb4b4b4...Te6edf3hitTb4b4b4, Te6edf3planetIndexTff7b72: Te6edf3i Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3bestTb4b4b4;
Tb4b4b4}

T8b949e/**
* 2D layout under a planet-mode pointer, or null if the ray misses.
* With planets, the hit maps onto that interface cluster.
*/
Tff7b72export Tff7b72function Te6edf3pointerToLayoutTb4b4b4(Te6edf3cssXTb4b4b4, Te6edf3cssYTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4, Te6edf3eyeTb4b4b4, Te6edf3layoutScaleTb4b4b4, Te6edf3planetsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3planetsTb4b4b4) Tff7b72&& Te6edf3planetsTb4b4b4.Te6edf3lengthTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3hit Tff7b72= Te6edf3raycastPlanetsTb4b4b4(Te6edf3cssXTb4b4b4, Te6edf3cssYTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4, Te6edf3eyeTb4b4b4, Te6edf3planetsTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hitTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3p Tff7b72= Te6edf3planetsTb4b4b4[Te6edf3hitTb4b4b4.Te6edf3planetIndexTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3r Tff7b72= Te6edf3pTb4b4b4.Te6edf3radius Tff7b72> T79c0ff1e-6 Tff7b72? Te6edf3pTb4b4b4.Te6edf3radius Tff7b72: T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3off Tff7b72= Te6edf3sphereToLayoutTb4b4b4(Tb4b4b4(Te6edf3hitTb4b4b4.Te6edf3x Tff7b72- Te6edf3pTb4b4b4.Te6edf3cxTb4b4b4) Tff7b72/ Te6edf3rTb4b4b4, Tb4b4b4(Te6edf3hitTb4b4b4.Te6edf3y Tff7b72- Te6edf3pTb4b4b4.Te6edf3cyTb4b4b4) Tff7b72/ Te6edf3rTb4b4b4, Tb4b4b4(Te6edf3hitTb4b4b4.Te6edf3z Tff7b72- Te6edf3pTb4b4b4.Te6edf3czTb4b4b4) Tff7b72/ Te6edf3rTb4b4b4, Te6edf3pTb4b4b4.Te6edf3layoutScaleTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3xTff7b72: Tb4b4b4(Te6edf3pTb4b4b4.Te6edf3originX Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72+ Te6edf3offTb4b4b4.Te6edf3xTb4b4b4, Te6edf3yTff7b72: Tb4b4b4(Te6edf3pTb4b4b4.Te6edf3originY Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72+ Te6edf3offTb4b4b4.Te6edf3yTb4b4b4, Te6edf3planetIndexTff7b72: Te6edf3hitTb4b4b4.Te6edf3planetIndex Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3ray Tff7b72= Te6edf3screenRayTb4b4b4(Te6edf3cssXTb4b4b4, Te6edf3cssYTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4, Te6edf3eyeTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3hit Tff7b72= Te6edf3raySphereTb4b4b4(Te6edf3rayTb4b4b4.Te6edf3originTb4b4b4, Te6edf3rayTb4b4b4.Te6edf3dirTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hitTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72return Te6edf3sphereToLayoutTb4b4b4(Te6edf3hitTb4b4b4.Te6edf3xTb4b4b4, Te6edf3hitTb4b4b4.Te6edf3yTb4b4b4, Te6edf3hitTb4b4b4.Te6edf3zTb4b4b4, Te6edf3layoutScaleTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3layoutToWasmScreenTb4b4b4(Te6edf3lxTb4b4b4, Te6edf3lyTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4, Te6edf3cam Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3zoom Tff7b72= Te6edf3camTff7b72?Tb4b4b4.Te6edf3zoom Tff7b72> T79c0ff0 Tff7b72? Te6edf3camTb4b4b4.Te6edf3zoom Tff7b72: T79c0ff1Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3xTff7b72: Tb4b4b4(Te6edf3lx Tff7b72- Tb4b4b4(Te6edf3camTff7b72?Tb4b4b4.Te6edf3x Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4) Tff7b72* Te6edf3zoom Tff7b72+ Te6edf3width Tff7b72* T79c0ff0.5Tb4b4b4,
Te6edf3yTff7b72: Tb4b4b4(Te6edf3ly Tff7b72- Tb4b4b4(Te6edf3camTff7b72?Tb4b4b4.Te6edf3y Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4) Tff7b72* Te6edf3zoom Tff7b72+ Te6edf3height Tff7b72* T79c0ff0.5Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72function Te6edf3localScaleForPlanetTb4b4b4(Te6edf3nodesTb4b4b4, Te6edf3srcCountTb4b4b4, Te6edf3homeTb4b4b4, Te6edf3planetIndexTb4b4b4, Te6edf3ifaceIndexTb4b4b4, Te6edf3fallbackTb4b4b4) Tb4b4b4{
Tff7b72let Te6edf3maxR Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3ox Tff7b72= Te6edf3fallback Tff7b72|| Te6edf3ifaceIndex Tff7b72< T79c0ff0 Tff7b72? T79c0ff0 Tff7b72: Te6edf3nodesTb4b4b4[Te6edf3ifaceIndex Tff7b72* Te6edf3NODE_STRIDETb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3oy Tff7b72= Te6edf3fallback Tff7b72|| Te6edf3ifaceIndex Tff7b72< T79c0ff0 Tff7b72? T79c0ff0 Tff7b72: Te6edf3nodesTb4b4b4[Te6edf3ifaceIndex Tff7b72* Te6edf3NODE_STRIDE Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3srcCountTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3homeTb4b4b4[Te6edf3iTb4b4b4] Tff7b72!== Te6edf3planetIndexTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3kOff Tff7b72= Te6edf3i Tff7b72* Te6edf3NODE_STRIDETb4b4b4;
Tff7b72const Te6edf3r Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Tb4b4b4(Te6edf3nodesTb4b4b4[Te6edf3kOffTb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72- Te6edf3oxTb4b4b4, Tb4b4b4(Te6edf3nodesTb4b4b4[Te6edf3kOff Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72- Te6edf3oyTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3r Tff7b72> Te6edf3maxRTb4b4b4) Te6edf3maxR Tff7b72= Te6edf3rTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3maxR Tff7b72* Te6edf3LAYOUT_SCALE_FITTb4b4b4, Te6edf3PLANET_CLUSTER_SCALE_FLOORTb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/**
* Project the 2D graph onto per-interface globes.
*
* @param {{
* nodes: Float32Array,
* edges: Float32Array|null|undefined,
* width: number,
* height: number,
* yaw: number,
* pitch: number,
* dist: number,
* dark: boolean,
* idByIndex?: (string|null|undefined)[],
* kindByIndex?: (number|null|undefined)[],
* prevPlanets?: {id?:string,layoutScale?:number}[],
* prevHomeById?: Record<string, string>,
* }} opts
*/
Tff7b72export Tff7b72function Te6edf3projectPlanetSceneTb4b4b4(Te6edf3optsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3width Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3optsTff7b72?Tb4b4b4.Te6edf3width Tff7b72|| T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3height Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3optsTff7b72?Tb4b4b4.Te6edf3height Tff7b72|| T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3srcNodes Tff7b72= Te6edf3optsTff7b72?Tb4b4b4.Te6edf3nodesTb4b4b4;
Tff7b72const Te6edf3srcCount Tff7b72= Te6edf3srcNodes Tff7b72&& Te6edf3srcNodesTb4b4b4.Te6edf3length Tff7b72? Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3srcNodesTb4b4b4.Te6edf3length Tff7b72/ Te6edf3NODE_STRIDETb4b4b4) Tff7b72: T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3idByIndex Tff7b72= Te6edf3optsTff7b72?Tb4b4b4.Te6edf3idByIndex Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3kindByIndex Tff7b72= Te6edf3optsTff7b72?Tb4b4b4.Te6edf3kindByIndex Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3dark Tff7b72= Te6edf3optsTff7b72?Tb4b4b4.Te6edf3dark Tff7b72=== Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3srcEdges Tff7b72= Te6edf3optsTff7b72?Tb4b4b4.Te6edf3edgesTb4b4b4;
Tff7b72const Te6edf3srcEdgeCount Tff7b72= Te6edf3srcEdges Tff7b72&& Te6edf3srcEdgesTb4b4b4.Te6edf3length Tff7b72? Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3srcEdgesTb4b4b4.Te6edf3length Tff7b72/ Te6edf3EDGE_STRIDETb4b4b4) Tff7b72: T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3prevPlanets Tff7b72= Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3optsTff7b72?Tb4b4b4.Te6edf3prevPlanetsTb4b4b4) Tff7b72? Te6edf3optsTb4b4b4.Te6edf3prevPlanets Tff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3prevScaleById Tff7b72= Tffa657ObjectTb4b4b4.Te6edf3createTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3prevPlanetsTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3pl Tff7b72= Te6edf3prevPlanetsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3plTff7b72?Tb4b4b4.Te6edf3idTb4b4b4) Te6edf3prevScaleByIdTb4b4b4[Tffa657StringTb4b4b4(Te6edf3plTb4b4b4.Te6edf3idTb4b4b4)Tb4b4b4] Tff7b72= Te6edf3plTb4b4b4.Te6edf3layoutScaleTb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3assigned Tff7b72= Te6edf3assignPlanetHomesTb4b4b4(Te6edf3srcCountTb4b4b4, Te6edf3kindByIndexTb4b4b4, Te6edf3idByIndexTb4b4b4, Te6edf3srcNodesTb4b4b4, Te6edf3optsTff7b72?Tb4b4b4.Te6edf3prevHomeByIdTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3planetCount Tff7b72= Te6edf3assignedTb4b4b4.Te6edf3fallback Tff7b72? Tb4b4b4(Te6edf3srcCount Tff7b72> T79c0ff1 Tff7b72? T79c0ff1 Tff7b72: T79c0ff0Tb4b4b4) Tff7b72: Te6edf3assignedTb4b4b4.Te6edf3ifaceIndicesTb4b4b4.Te6edf3lengthTb4b4b4;
Tff7b72const Te6edf3orbit Tff7b72= Te6edf3clampOrbitTb4b4b4(
Te6edf3optsTff7b72?Tb4b4b4.Te6edf3yaw Tff7b72?? Te6edf3DEFAULT_ORBIT_YAWTb4b4b4,
Te6edf3optsTff7b72?Tb4b4b4.Te6edf3pitch Tff7b72?? Te6edf3DEFAULT_ORBIT_PITCHTb4b4b4,
Te6edf3optsTff7b72?Tb4b4b4.Te6edf3dist Tff7b72?? Te6edf3DEFAULT_ORBIT_DISTTb4b4b4,
Te6edf3planetCount
Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3eye Tff7b72= Te6edf3orbitEyeTb4b4b4(Te6edf3orbitTb4b4b4.Te6edf3yawTb4b4b4, Te6edf3orbitTb4b4b4.Te6edf3pitchTb4b4b4, Te6edf3orbitTb4b4b4.Te6edf3distTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3view Tff7b72= Te6edf3lookAtOriginTb4b4b4(Te6edf3eyeTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3proj Tff7b72= Te6edf3perspectiveTb4b4b4(Te6edf3PLANET_FOV_YTb4b4b4, Te6edf3width Tff7b72/ Te6edf3heightTb4b4b4, Te6edf3PLANET_NEARTb4b4b4, Te6edf3PLANET_FARTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3viewProj Tff7b72= Te6edf3mat4MultiplyTb4b4b4(Te6edf3projTb4b4b4, Te6edf3viewTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3centers Tff7b72= Te6edf3placePlanetCentersTb4b4b4(Te6edf3planetCountTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3memberCounts Tff7b72= Tff7b72new Tffa657ArrayTb4b4b4(Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3planetCountTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3fillTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3srcCountTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3h Tff7b72= Te6edf3assignedTb4b4b4.Te6edf3homeTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3h Tff7b72>= T79c0ff0 Tff7b72&& Te6edf3h Tff7b72< Te6edf3memberCountsTb4b4b4.Te6edf3lengthTb4b4b4) Te6edf3memberCountsTb4b4b4[Te6edf3hTb4b4b4] Tff7b72+= T79c0ff1Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3planets Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3p Tff7b72= T79c0ff0Tb4b4b4; Te6edf3p Tff7b72< Te6edf3planetCountTb4b4b4; Te6edf3pTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3ifaceIndex Tff7b72= Te6edf3assignedTb4b4b4.Te6edf3fallback Tff7b72? Tff7b72-T79c0ff1 Tff7b72: Te6edf3assignedTb4b4b4.Te6edf3ifaceIndicesTb4b4b4[Te6edf3pTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3c Tff7b72= Te6edf3centersTb4b4b4[Te6edf3pTb4b4b4] Tff7b72|| Tb4b4b4{ Te6edf3cxTff7b72: T79c0ff1.7Tb4b4b4, Te6edf3cyTff7b72: T79c0ff0.1Tb4b4b4, Te6edf3czTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3radius Tff7b72= Te6edf3planetRadiusForPeersTb4b4b4(Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3memberCountsTb4b4b4[Te6edf3pTb4b4b4] Tff7b72- Tb4b4b4(Te6edf3assignedTb4b4b4.Te6edf3fallback Tff7b72? T79c0ff0 Tff7b72: T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3originX Tff7b72= Te6edf3ifaceIndex Tff7b72>= T79c0ff0 Tff7b72? Te6edf3srcNodesTb4b4b4[Te6edf3ifaceIndex Tff7b72* Te6edf3NODE_STRIDETb4b4b4] Tff7b72|| T79c0ff0 Tff7b72: T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3originY Tff7b72= Te6edf3ifaceIndex Tff7b72>= T79c0ff0 Tff7b72? Te6edf3srcNodesTb4b4b4[Te6edf3ifaceIndex Tff7b72* Te6edf3NODE_STRIDE Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72|| T79c0ff0 Tff7b72: T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3id Tff7b72= Te6edf3ifaceIndex Tff7b72>= T79c0ff0 Tff7b72&& Te6edf3idByIndexTb4b4b4[Te6edf3ifaceIndexTb4b4b4] Tff7b72!= Tff7b72null Tff7b72? Tffa657StringTb4b4b4(Te6edf3idByIndexTb4b4b4[Te6edf3ifaceIndexTb4b4b4]Tb4b4b4) Tff7b72: Ta5d6ff`Ta5d6ffplanet-Tffd700${Te6edf3pTffd700}Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3kind Tff7b72= Te6edf3ifaceIndex Tff7b72>= T79c0ff0 Tff7b72? Te6edf3kindOfTb4b4b4(Te6edf3ifaceIndexTb4b4b4, Te6edf3kindByIndexTb4b4b4, Te6edf3idByIndexTb4b4b4) Tff7b72: Te6edf3PLANET_KIND_IFACE_ONTb4b4b4;
Tff7b72const Te6edf3offline Tff7b72= Te6edf3kind Tff7b72=== Te6edf3PLANET_KIND_IFACE_OFF Tff7b72|| Te6edf3kind Tff7b72=== Te6edf3PLANET_KIND_DISCOVEREDTb4b4b4;
Te6edf3planetsTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3cxTff7b72: Te6edf3cTb4b4b4.Te6edf3cxTb4b4b4,
Te6edf3cyTff7b72: Te6edf3cTb4b4b4.Te6edf3cyTb4b4b4,
Te6edf3czTff7b72: Te6edf3cTb4b4b4.Te6edf3czTb4b4b4,
Te6edf3radiusTb4b4b4,
Te6edf3originXTb4b4b4,
Te6edf3originYTb4b4b4,
Te6edf3layoutScaleTff7b72: Te6edf3stabilizeLayoutScaleTb4b4b4(
Te6edf3localScaleForPlanetTb4b4b4(Te6edf3srcNodesTb4b4b4, Te6edf3srcCountTb4b4b4, Te6edf3assignedTb4b4b4.Te6edf3homeTb4b4b4, Te6edf3pTb4b4b4, Te6edf3ifaceIndexTb4b4b4, Te6edf3assignedTb4b4b4.Te6edf3fallbackTb4b4b4)Tb4b4b4,
Te6edf3prevScaleByIdTb4b4b4[Te6edf3idTb4b4b4]
Tb4b4b4)Tb4b4b4,
Te6edf3ifaceIndexTb4b4b4,
Te6edf3idTb4b4b4,
Te6edf3fillTff7b72: Te6edf3paletteForIdTb4b4b4(Te6edf3idTb4b4b4, Te6edf3offlineTb4b4b4, Te6edf3darkTb4b4b4)Tb4b4b4,
Te6edf3offlineTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3world Tff7b72= Tff7b72new Tffa657ArrayTb4b4b4(Te6edf3srcCountTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3srcCountTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3k Tff7b72= Te6edf3kindOfTb4b4b4(Te6edf3iTb4b4b4, Te6edf3kindByIndexTb4b4b4, Te6edf3idByIndexTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3k Tff7b72=== Te6edf3PLANET_KIND_METb4b4b4) Tb4b4b4{
Te6edf3worldTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Tb4b4b4{ Te6edf3xTff7b72: T79c0ff0Tb4b4b4, Te6edf3yTff7b72: T79c0ff0Tb4b4b4, Te6edf3zTff7b72: T79c0ff0Tb4b4b4, Te6edf3nxTff7b72: T79c0ff0Tb4b4b4, Te6edf3nyTff7b72: T79c0ff0Tb4b4b4, Te6edf3nzTff7b72: T79c0ff1Tb4b4b4, Te6edf3planetTff7b72: Tff7b72-T79c0ff1 Tb4b4b4}Tb4b4b4;
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3p Tff7b72= Te6edf3planetsTb4b4b4[Te6edf3assignedTb4b4b4.Te6edf3homeTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3pTb4b4b4) Tb4b4b4{
Te6edf3worldTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Tb4b4b4{ Te6edf3xTff7b72: T79c0ff0Tb4b4b4, Te6edf3yTff7b72: T79c0ff0Tb4b4b4, Te6edf3zTff7b72: T79c0ff0Tb4b4b4, Te6edf3nxTff7b72: T79c0ff0Tb4b4b4, Te6edf3nyTff7b72: T79c0ff0Tb4b4b4, Te6edf3nzTff7b72: T79c0ff1Tb4b4b4, Te6edf3planetTff7b72: Tff7b72-T79c0ff1 Tb4b4b4}Tb4b4b4;
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3assignedTb4b4b4.Te6edf3fallback Tff7b72&& Te6edf3i Tff7b72=== Te6edf3pTb4b4b4.Te6edf3ifaceIndexTb4b4b4) Tb4b4b4{
Te6edf3worldTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Tb4b4b4{ Te6edf3xTff7b72: Te6edf3pTb4b4b4.Te6edf3cxTb4b4b4, Te6edf3yTff7b72: Te6edf3pTb4b4b4.Te6edf3cyTb4b4b4, Te6edf3zTff7b72: Te6edf3pTb4b4b4.Te6edf3czTb4b4b4, Te6edf3nxTff7b72: T79c0ff0Tb4b4b4, Te6edf3nyTff7b72: T79c0ff0Tb4b4b4, Te6edf3nzTff7b72: T79c0ff1Tb4b4b4, Te6edf3planetTff7b72: Te6edf3assignedTb4b4b4.Te6edf3homeTb4b4b4[Te6edf3iTb4b4b4] Tb4b4b4}Tb4b4b4;
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3o Tff7b72= Te6edf3i Tff7b72* Te6edf3NODE_STRIDETb4b4b4;
Tff7b72const Te6edf3local Tff7b72= Te6edf3layoutToSphereTb4b4b4(Tb4b4b4(Te6edf3srcNodesTb4b4b4[Te6edf3oTb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72- Te6edf3pTb4b4b4.Te6edf3originXTb4b4b4, Tb4b4b4(Te6edf3srcNodesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72- Te6edf3pTb4b4b4.Te6edf3originYTb4b4b4, Te6edf3pTb4b4b4.Te6edf3layoutScaleTb4b4b4)Tb4b4b4;
Te6edf3worldTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Tb4b4b4{
Te6edf3xTff7b72: Te6edf3pTb4b4b4.Te6edf3cx Tff7b72+ Te6edf3localTb4b4b4.Te6edf3x Tff7b72* Te6edf3pTb4b4b4.Te6edf3radiusTb4b4b4,
Te6edf3yTff7b72: Te6edf3pTb4b4b4.Te6edf3cy Tff7b72+ Te6edf3localTb4b4b4.Te6edf3y Tff7b72* Te6edf3pTb4b4b4.Te6edf3radiusTb4b4b4,
Te6edf3zTff7b72: Te6edf3pTb4b4b4.Te6edf3cz Tff7b72+ Te6edf3localTb4b4b4.Te6edf3z Tff7b72* Te6edf3pTb4b4b4.Te6edf3radiusTb4b4b4,
Te6edf3nxTff7b72: Te6edf3localTb4b4b4.Te6edf3xTb4b4b4,
Te6edf3nyTff7b72: Te6edf3localTb4b4b4.Te6edf3yTb4b4b4,
Te6edf3nzTff7b72: Te6edf3localTb4b4b4.Te6edf3zTb4b4b4,
Te6edf3planetTff7b72: Te6edf3assignedTb4b4b4.Te6edf3homeTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3sprites Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3addSprite Tff7b72= Tb4b4b4(Te6edf3wxTb4b4b4, Te6edf3wyTb4b4b4, Te6edf3wzTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3rTb4b4b4, Te6edf3gTb4b4b4, Te6edf3bTb4b4b4, Te6edf3aTb4b4b4, Te6edf3useTexTb4b4b4, Te6edf3uTb4b4b4, Te6edf3vTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3clip Tff7b72= Te6edf3transformPointTb4b4b4(Te6edf3viewProjTb4b4b4, Te6edf3wxTb4b4b4, Te6edf3wyTb4b4b4, Te6edf3wzTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3screen Tff7b72= Te6edf3clipToScreenTb4b4b4(Te6edf3clipTb4b4b4.Te6edf3xTb4b4b4, Te6edf3clipTb4b4b4.Te6edf3yTb4b4b4, Te6edf3clipTb4b4b4.Te6edf3wTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3screenTb4b4b4.Te6edf3ok Tff7b72&& Te6edf3clipTb4b4b4.Te6edf3w Tff7b72<= T79c0ff0Tb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3draw Tff7b72= Te6edf3screenToDrawWorldTb4b4b4(Te6edf3screenTb4b4b4.Te6edf3xTb4b4b4, Te6edf3screenTb4b4b4.Te6edf3yTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3viewZ Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3wx Tff7b72- Te6edf3eyeTb4b4b4.Te6edf3xTb4b4b4, Te6edf3wy Tff7b72- Te6edf3eyeTb4b4b4.Te6edf3yTb4b4b4, Te6edf3wz Tff7b72- Te6edf3eyeTb4b4b4.Te6edf3zTb4b4b4)Tb4b4b4;
Te6edf3spritesTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3xTff7b72: Te6edf3drawTb4b4b4.Te6edf3xTb4b4b4,
Te6edf3yTff7b72: Te6edf3drawTb4b4b4.Te6edf3yTb4b4b4,
Te6edf3zTff7b72: Te6edf3viewZTb4b4b4,
Te6edf3sizeTb4b4b4,
Te6edf3rTb4b4b4,
Te6edf3gTb4b4b4,
Te6edf3bTb4b4b4,
Te6edf3aTb4b4b4,
Te6edf3useTexTb4b4b4,
Te6edf3uTb4b4b4,
Te6edf3vTb4b4b4,
Te6edf3sxTff7b72: Te6edf3screenTb4b4b4.Te6edf3xTb4b4b4,
Te6edf3syTff7b72: Te6edf3screenTb4b4b4.Te6edf3yTb4b4b4,
Te6edf3okTff7b72: Te6edf3screenTb4b4b4.Te6edf3okTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3spritesTb4b4b4[Te6edf3spritesTb4b4b4.Te6edf3length Tff7b72- T79c0ff1Tb4b4b4]Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72for Tb4b4b4(Tff7b72let Te6edf3p Tff7b72= T79c0ff0Tb4b4b4; Te6edf3p Tff7b72< Te6edf3planetsTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3pTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3pl Tff7b72= Te6edf3planetsTb4b4b4[Te6edf3pTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3dist Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3plTb4b4b4.Te6edf3cx Tff7b72- Te6edf3eyeTb4b4b4.Te6edf3xTb4b4b4, Te6edf3plTb4b4b4.Te6edf3cy Tff7b72- Te6edf3eyeTb4b4b4.Te6edf3yTb4b4b4, Te6edf3plTb4b4b4.Te6edf3cz Tff7b72- Te6edf3eyeTb4b4b4.Te6edf3zTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3pxR Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff18Tb4b4b4, Te6edf3projectedSphereRadiusPxTb4b4b4(Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3distTb4b4b4, T79c0ff1.05Tb4b4b4)Tb4b4b4, Te6edf3PLANET_FOV_YTb4b4b4, Te6edf3heightTb4b4b4) Tff7b72* Te6edf3plTb4b4b4.Te6edf3radiusTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3fill Tff7b72= Te6edf3plTb4b4b4.Te6edf3fillTb4b4b4;
Tff7b72const Te6edf3bodyA Tff7b72= Te6edf3dark Tff7b72? T79c0ff0.9 Tff7b72: T79c0ff0.92Tb4b4b4;
Te6edf3addSpriteTb4b4b4(Te6edf3plTb4b4b4.Te6edf3cxTb4b4b4, Te6edf3plTb4b4b4.Te6edf3cyTb4b4b4, Te6edf3plTb4b4b4.Te6edf3czTb4b4b4, Te6edf3pxR Tff7b72* T79c0ff1.08Tb4b4b4, Te6edf3fillTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3fillTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3fillTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4, T79c0ff0.14Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3addSpriteTb4b4b4(
Te6edf3plTb4b4b4.Te6edf3cxTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3cyTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3czTb4b4b4,
Te6edf3pxRTb4b4b4,
Te6edf3fillTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72* T79c0ff0.35 Tff7b72+ Tb4b4b4(Te6edf3dark Tff7b72? T79c0ff0.04 Tff7b72: T79c0ff0.55Tb4b4b4)Tb4b4b4,
Te6edf3fillTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72* T79c0ff0.4 Tff7b72+ Tb4b4b4(Te6edf3dark Tff7b72? T79c0ff0.08 Tff7b72: T79c0ff0.62Tb4b4b4)Tb4b4b4,
Te6edf3fillTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72* T79c0ff0.5 Tff7b72+ Tb4b4b4(Te6edf3dark Tff7b72? T79c0ff0.14 Tff7b72: T79c0ff0.7Tb4b4b4)Tb4b4b4,
Te6edf3bodyATb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0
Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3addSpriteTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff22Tb4b4b4, Te6edf3dark Tff7b72? T79c0ff0.95 Tff7b72: T79c0ff0.9Tb4b4b4, Te6edf3dark Tff7b72? T79c0ff0.78 Tff7b72: T79c0ff0.62Tb4b4b4, Te6edf3dark Tff7b72? T79c0ff0.28 Tff7b72: T79c0ff0.16Tb4b4b4, T79c0ff0.22Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3projected Tff7b72= Tff7b72new Tffa657ArrayTb4b4b4(Te6edf3srcCountTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3pick Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3srcCountTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3w Tff7b72= Te6edf3worldTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3o Tff7b72= Te6edf3i Tff7b72* Te6edf3NODE_STRIDETb4b4b4;
Tff7b72const Te6edf3k Tff7b72= Te6edf3kindOfTb4b4b4(Te6edf3iTb4b4b4, Te6edf3kindByIndexTb4b4b4, Te6edf3idByIndexTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3pl Tff7b72= Te6edf3wTb4b4b4.Te6edf3planet Tff7b72>= T79c0ff0 Tff7b72? Te6edf3planetsTb4b4b4[Te6edf3wTb4b4b4.Te6edf3planetTb4b4b4] Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72let Te6edf3facing Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3pl Tff7b72&& Te6edf3k Tff7b72!== Te6edf3PLANET_KIND_ME Tff7b72&& Te6edf3i Tff7b72!== Te6edf3plTb4b4b4.Te6edf3ifaceIndexTb4b4b4) Tb4b4b4{
Te6edf3facing Tff7b72= Te6edf3sphereFacingAtTb4b4b4(Te6edf3wTb4b4b4.Te6edf3nxTb4b4b4, Te6edf3wTb4b4b4.Te6edf3nyTb4b4b4, Te6edf3wTb4b4b4.Te6edf3nzTb4b4b4, Te6edf3eyeTb4b4b4, Te6edf3plTb4b4b4.Te6edf3cxTb4b4b4, Te6edf3plTb4b4b4.Te6edf3cyTb4b4b4, Te6edf3plTb4b4b4.Te6edf3czTb4b4b4, Te6edf3plTb4b4b4.Te6edf3radiusTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3viewZ Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3wTb4b4b4.Te6edf3x Tff7b72- Te6edf3eyeTb4b4b4.Te6edf3xTb4b4b4, Te6edf3wTb4b4b4.Te6edf3y Tff7b72- Te6edf3eyeTb4b4b4.Te6edf3yTb4b4b4, Te6edf3wTb4b4b4.Te6edf3z Tff7b72- Te6edf3eyeTb4b4b4.Te6edf3zTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3persp Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0.4Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff2.2Tb4b4b4, T79c0ff3.2 Tff7b72/ Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3viewZTb4b4b4, T79c0ff0.25Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3size Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff7Tb4b4b4, Tb4b4b4(Te6edf3srcNodesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff2Tb4b4b4] Tff7b72|| T79c0ff18Tb4b4b4) Tff7b72* Te6edf3perspTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3k Tff7b72=== Te6edf3PLANET_KIND_METb4b4b4) Te6edf3size Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3sizeTb4b4b4, T79c0ff20Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3isPlanetInterfaceKindTb4b4b4(Te6edf3kTb4b4b4)Tb4b4b4) Te6edf3size Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3sizeTb4b4b4, T79c0ff16Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3front Tff7b72= Te6edf3facing Tff7b72> T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3a Tff7b72= Te6edf3front Tff7b72? Te6edf3srcNodesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff6Tb4b4b4] Tff7b72|| T79c0ff1 Tff7b72: Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0.1Tb4b4b4, Tb4b4b4(Te6edf3srcNodesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff6Tb4b4b4] Tff7b72|| T79c0ff1Tb4b4b4) Tff7b72* T79c0ff0.2Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3spr Tff7b72= Te6edf3addSpriteTb4b4b4(
Te6edf3wTb4b4b4.Te6edf3xTb4b4b4,
Te6edf3wTb4b4b4.Te6edf3yTb4b4b4,
Te6edf3wTb4b4b4.Te6edf3zTb4b4b4,
Te6edf3front Tff7b72? Te6edf3size Tff7b72: Te6edf3size Tff7b72* T79c0ff0.55Tb4b4b4,
Te6edf3srcNodesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff3Tb4b4b4]Tb4b4b4,
Te6edf3srcNodesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff4Tb4b4b4]Tb4b4b4,
Te6edf3srcNodesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff5Tb4b4b4]Tb4b4b4,
Te6edf3aTb4b4b4,
Te6edf3front Tff7b72? Te6edf3srcNodesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff7Tb4b4b4] Tff7b72: T79c0ff0Tb4b4b4,
Te6edf3srcNodesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff8Tb4b4b4]Tb4b4b4,
Te6edf3srcNodesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff9Tb4b4b4]
Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3rec Tff7b72= Tb4b4b4{
Te6edf3sxTff7b72: Te6edf3spr Tff7b72? Te6edf3sprTb4b4b4.Te6edf3sx Tff7b72: T79c0ff0Tb4b4b4,
Te6edf3syTff7b72: Te6edf3spr Tff7b72? Te6edf3sprTb4b4b4.Te6edf3sy Tff7b72: T79c0ff0Tb4b4b4,
Te6edf3sizeTb4b4b4,
Te6edf3facingTb4b4b4,
Te6edf3frontTff7b72: Te6edf3front Tff7b72&& Tb4b4b4(Tff7b72!Te6edf3spr Tff7b72|| Te6edf3sprTb4b4b4.Te6edf3okTb4b4b4)Tb4b4b4,
Te6edf3kindTff7b72: Te6edf3kTb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3projectedTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3recTb4b4b4;
Tff7b72const Te6edf3id Tff7b72= Te6edf3idByIndexTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3recTb4b4b4.Te6edf3front Tff7b72&& Te6edf3idTb4b4b4) Tb4b4b4{
Te6edf3pickTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{ Te6edf3idTff7b72: Tffa657StringTb4b4b4(Te6edf3idTb4b4b4)Tb4b4b4, Te6edf3sxTff7b72: Te6edf3recTb4b4b4.Te6edf3sxTb4b4b4, Te6edf3syTff7b72: Te6edf3recTb4b4b4.Te6edf3syTb4b4b4, Te6edf3sizeTff7b72: Te6edf3recTb4b4b4.Te6edf3size Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Te6edf3spritesTb4b4b4.Te6edf3sortTb4b4b4(Tb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4) Tb4b4b4=> Te6edf3bTb4b4b4.Te6edf3z Tff7b72- Te6edf3aTb4b4b4.Te6edf3zTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3nodeNeed Tff7b72= Te6edf3spritesTb4b4b4.Te6edf3length Tff7b72* Te6edf3NODE_STRIDETb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3nodeScratchTb4b4b4.Te6edf3length Tff7b72< Te6edf3nodeNeedTb4b4b4) Tb4b4b4{
Te6edf3nodeScratch Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(Te6edf3nodeNeedTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3s Tff7b72= T79c0ff0Tb4b4b4; Te6edf3s Tff7b72< Te6edf3spritesTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3sTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3d Tff7b72= Te6edf3s Tff7b72* Te6edf3NODE_STRIDETb4b4b4;
Tff7b72const Te6edf3n Tff7b72= Te6edf3spritesTb4b4b4[Te6edf3sTb4b4b4]Tb4b4b4;
Te6edf3nodeScratchTb4b4b4[Te6edf3dTb4b4b4] Tff7b72= Te6edf3nTb4b4b4.Te6edf3xTb4b4b4;
Te6edf3nodeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72= Te6edf3nTb4b4b4.Te6edf3yTb4b4b4;
Te6edf3nodeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff2Tb4b4b4] Tff7b72= Te6edf3nTb4b4b4.Te6edf3sizeTb4b4b4;
Te6edf3nodeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff3Tb4b4b4] Tff7b72= Te6edf3nTb4b4b4.Te6edf3rTb4b4b4;
Te6edf3nodeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff4Tb4b4b4] Tff7b72= Te6edf3nTb4b4b4.Te6edf3gTb4b4b4;
Te6edf3nodeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff5Tb4b4b4] Tff7b72= Te6edf3nTb4b4b4.Te6edf3bTb4b4b4;
Te6edf3nodeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff6Tb4b4b4] Tff7b72= Te6edf3nTb4b4b4.Te6edf3aTb4b4b4;
Te6edf3nodeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff7Tb4b4b4] Tff7b72= Te6edf3nTb4b4b4.Te6edf3useTexTb4b4b4;
Te6edf3nodeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff8Tb4b4b4] Tff7b72= Te6edf3nTb4b4b4.Te6edf3uTb4b4b4;
Te6edf3nodeScratchTb4b4b4[Te6edf3d Tff7b72+ T79c0ff9Tb4b4b4] Tff7b72= Te6edf3nTb4b4b4.Te6edf3vTb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3grid Tff7b72= Te6edf3buildGlobeGridTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3edgeNeed Tff7b72= Tb4b4b4(Te6edf3planetsTb4b4b4.Te6edf3length Tff7b72* Tb4b4b4(Te6edf3gridTb4b4b4.Te6edf3length Tff7b72+ T79c0ff8Tb4b4b4) Tff7b72+ Te6edf3srcEdgeCount Tff7b72+ Te6edf3ringSegs Tff7b72+ Te6edf3planetCountTb4b4b4) Tff7b72* Te6edf3EDGE_STRIDETb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3edgeScratchTb4b4b4.Te6edf3length Tff7b72< Te6edf3edgeNeedTb4b4b4) Tb4b4b4{
Te6edf3edgeScratch Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3edgeNeedTb4b4b4, T79c0ff64Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72let Te6edf3w Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3maxSeg Tff7b72= T79c0ff1.5 Tff7b72* Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3writeWorldSeg Tff7b72= Tb4b4b4(Te6edf3x1Tb4b4b4, Te6edf3y1Tb4b4b4, Te6edf3z1Tb4b4b4, Te6edf3x2Tb4b4b4, Te6edf3y2Tb4b4b4, Te6edf3z2Tb4b4b4, Te6edf3rTb4b4b4, Te6edf3gTb4b4b4, Te6edf3bTb4b4b4, Te6edf3aTb4b4b4, Te6edf3requireFrontTb4b4b4, Te6edf3cxTb4b4b4, Te6edf3cyTb4b4b4, Te6edf3czTb4b4b4, Te6edf3radiusTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3requireFrontTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3n1x Tff7b72= Te6edf3radius Tff7b72> T79c0ff1e-6 Tff7b72? Tb4b4b4(Te6edf3x1 Tff7b72- Te6edf3cxTb4b4b4) Tff7b72/ Te6edf3radius Tff7b72: Te6edf3x1Tb4b4b4;
Tff7b72const Te6edf3n1y Tff7b72= Te6edf3radius Tff7b72> T79c0ff1e-6 Tff7b72? Tb4b4b4(Te6edf3y1 Tff7b72- Te6edf3cyTb4b4b4) Tff7b72/ Te6edf3radius Tff7b72: Te6edf3y1Tb4b4b4;
Tff7b72const Te6edf3n1z Tff7b72= Te6edf3radius Tff7b72> T79c0ff1e-6 Tff7b72? Tb4b4b4(Te6edf3z1 Tff7b72- Te6edf3czTb4b4b4) Tff7b72/ Te6edf3radius Tff7b72: Te6edf3z1Tb4b4b4;
Tff7b72const Te6edf3n2x Tff7b72= Te6edf3radius Tff7b72> T79c0ff1e-6 Tff7b72? Tb4b4b4(Te6edf3x2 Tff7b72- Te6edf3cxTb4b4b4) Tff7b72/ Te6edf3radius Tff7b72: Te6edf3x2Tb4b4b4;
Tff7b72const Te6edf3n2y Tff7b72= Te6edf3radius Tff7b72> T79c0ff1e-6 Tff7b72? Tb4b4b4(Te6edf3y2 Tff7b72- Te6edf3cyTb4b4b4) Tff7b72/ Te6edf3radius Tff7b72: Te6edf3y2Tb4b4b4;
Tff7b72const Te6edf3n2z Tff7b72= Te6edf3radius Tff7b72> T79c0ff1e-6 Tff7b72? Tb4b4b4(Te6edf3z2 Tff7b72- Te6edf3czTb4b4b4) Tff7b72/ Te6edf3radius Tff7b72: Te6edf3z2Tb4b4b4;
Tff7b72const Te6edf3f1 Tff7b72= Te6edf3sphereFacingAtTb4b4b4(Te6edf3n1xTb4b4b4, Te6edf3n1yTb4b4b4, Te6edf3n1zTb4b4b4, Te6edf3eyeTb4b4b4, Te6edf3cxTb4b4b4, Te6edf3cyTb4b4b4, Te6edf3czTb4b4b4, Te6edf3radiusTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3f2 Tff7b72= Te6edf3sphereFacingAtTb4b4b4(Te6edf3n2xTb4b4b4, Te6edf3n2yTb4b4b4, Te6edf3n2zTb4b4b4, Te6edf3eyeTb4b4b4, Te6edf3cxTb4b4b4, Te6edf3cyTb4b4b4, Te6edf3czTb4b4b4, Te6edf3radiusTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3f1 Tff7b72<= T79c0ff0 Tff7b72|| Te6edf3f2 Tff7b72<= T79c0ff0Tb4b4b4) Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3c1 Tff7b72= Te6edf3transformPointTb4b4b4(Te6edf3viewProjTb4b4b4, Te6edf3x1Tb4b4b4, Te6edf3y1Tb4b4b4, Te6edf3z1Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3c2 Tff7b72= Te6edf3transformPointTb4b4b4(Te6edf3viewProjTb4b4b4, Te6edf3x2Tb4b4b4, Te6edf3y2Tb4b4b4, Te6edf3z2Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3clipped Tff7b72= Te6edf3clipLineToPositiveWTb4b4b4(Te6edf3c1Tb4b4b4, Te6edf3c2Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3clippedTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3s1 Tff7b72= Te6edf3clipToScreenTb4b4b4(Te6edf3clippedTb4b4b4.Te6edf3x1Tb4b4b4, Te6edf3clippedTb4b4b4.Te6edf3y1Tb4b4b4, Te6edf3clippedTb4b4b4.Te6edf3w1Tb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3s2 Tff7b72= Te6edf3clipToScreenTb4b4b4(Te6edf3clippedTb4b4b4.Te6edf3x2Tb4b4b4, Te6edf3clippedTb4b4b4.Te6edf3y2Tb4b4b4, Te6edf3clippedTb4b4b4.Te6edf3w2Tb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3s1Tb4b4b4.Te6edf3ok Tff7b72|| Tff7b72!Te6edf3s2Tb4b4b4.Te6edf3okTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3s1Tb4b4b4.Te6edf3xTb4b4b4) Tff7b72|| Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3s1Tb4b4b4.Te6edf3yTb4b4b4) Tff7b72|| Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3s2Tb4b4b4.Te6edf3xTb4b4b4) Tff7b72|| Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3s2Tb4b4b4.Te6edf3yTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3s1Tb4b4b4.Te6edf3x Tff7b72- Te6edf3s2Tb4b4b4.Te6edf3xTb4b4b4, Te6edf3s1Tb4b4b4.Te6edf3y Tff7b72- Te6edf3s2Tb4b4b4.Te6edf3yTb4b4b4) Tff7b72> Te6edf3maxSegTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3d1 Tff7b72= Te6edf3screenToDrawWorldTb4b4b4(Te6edf3s1Tb4b4b4.Te6edf3xTb4b4b4, Te6edf3s1Tb4b4b4.Te6edf3yTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3d2 Tff7b72= Te6edf3screenToDrawWorldTb4b4b4(Te6edf3s2Tb4b4b4.Te6edf3xTb4b4b4, Te6edf3s2Tb4b4b4.Te6edf3yTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3o Tff7b72= Te6edf3w Tff7b72* Te6edf3EDGE_STRIDETb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3oTb4b4b4] Tff7b72= Te6edf3d1Tb4b4b4.Te6edf3xTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3o Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72= Te6edf3d1Tb4b4b4.Te6edf3yTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3o Tff7b72+ T79c0ff2Tb4b4b4] Tff7b72= Te6edf3d2Tb4b4b4.Te6edf3xTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3o Tff7b72+ T79c0ff3Tb4b4b4] Tff7b72= Te6edf3d2Tb4b4b4.Te6edf3yTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3o Tff7b72+ T79c0ff4Tb4b4b4] Tff7b72= Te6edf3rTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3o Tff7b72+ T79c0ff5Tb4b4b4] Tff7b72= Te6edf3gTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3o Tff7b72+ T79c0ff6Tb4b4b4] Tff7b72= Te6edf3bTb4b4b4;
Te6edf3edgeScratchTb4b4b4[Te6edf3o Tff7b72+ T79c0ff7Tb4b4b4] Tff7b72= Te6edf3aTb4b4b4;
Te6edf3w Tff7b72+= T79c0ff1Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72const Te6edf3ringR Tff7b72= Te6edf3hubRadiusForPlanetCountTb4b4b4(Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3planetCountTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3ringCol Tff7b72= Te6edf3dark Tff7b72? Tb4b4b4[T79c0ff0.28Tb4b4b4, T79c0ff0.4Tb4b4b4, T79c0ff0.55Tb4b4b4, T79c0ff0.22Tb4b4b4] Tff7b72: Tb4b4b4[T79c0ff0.45Tb4b4b4, T79c0ff0.55Tb4b4b4, T79c0ff0.7Tb4b4b4, T79c0ff0.28Tb4b4b4]Tb4b4b4;
Tff7b72let Te6edf3prevRing Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3s Tff7b72= T79c0ff0Tb4b4b4; Te6edf3s Tff7b72<= Te6edf3ringSegsTb4b4b4; Te6edf3sTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3ang Tff7b72= Tb4b4b4(Te6edf3s Tff7b72/ Te6edf3ringSegsTb4b4b4) Tff7b72* Tffa657MathTb4b4b4.Te6edf3PI Tff7b72* T79c0ff2Tb4b4b4;
Tff7b72const Te6edf3pt Tff7b72= Tb4b4b4{ Te6edf3xTff7b72: Te6edf3ringR Tff7b72* Tffa657MathTb4b4b4.Te6edf3cosTb4b4b4(Te6edf3angTb4b4b4)Tb4b4b4, Te6edf3yTff7b72: T79c0ff0Tb4b4b4, Te6edf3zTff7b72: Te6edf3ringR Tff7b72* Tffa657MathTb4b4b4.Te6edf3sinTb4b4b4(Te6edf3angTb4b4b4) Tb4b4b4}Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prevRingTb4b4b4) Tb4b4b4{
Te6edf3writeWorldSegTb4b4b4(
Te6edf3prevRingTb4b4b4.Te6edf3xTb4b4b4,
Te6edf3prevRingTb4b4b4.Te6edf3yTb4b4b4,
Te6edf3prevRingTb4b4b4.Te6edf3zTb4b4b4,
Te6edf3ptTb4b4b4.Te6edf3xTb4b4b4,
Te6edf3ptTb4b4b4.Te6edf3yTb4b4b4,
Te6edf3ptTb4b4b4.Te6edf3zTb4b4b4,
Te6edf3ringColTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4,
Te6edf3ringColTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4,
Te6edf3ringColTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4,
Te6edf3ringColTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4,
Tff7b72falseTb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff1
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3prevRing Tff7b72= Te6edf3ptTb4b4b4;
Tb4b4b4}

Tff7b72for Tb4b4b4(Tff7b72let Te6edf3p Tff7b72= T79c0ff0Tb4b4b4; Te6edf3p Tff7b72< Te6edf3planetsTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3pTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3pl Tff7b72= Te6edf3planetsTb4b4b4[Te6edf3pTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3gc Tff7b72= Tb4b4b4[Te6edf3plTb4b4b4.Te6edf3fillTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72* T79c0ff0.7 Tff7b72+ T79c0ff0.15Tb4b4b4, Te6edf3plTb4b4b4.Te6edf3fillTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72* T79c0ff0.7 Tff7b72+ T79c0ff0.18Tb4b4b4, Te6edf3plTb4b4b4.Te6edf3fillTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72* T79c0ff0.75 Tff7b72+ T79c0ff0.22Tb4b4b4, Te6edf3dark Tff7b72? T79c0ff0.42 Tff7b72: T79c0ff0.48Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3gridTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3ln Tff7b72= Te6edf3gridTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Te6edf3writeWorldSegTb4b4b4(
Te6edf3plTb4b4b4.Te6edf3cx Tff7b72+ Te6edf3lnTb4b4b4.Te6edf3x1 Tff7b72* Te6edf3plTb4b4b4.Te6edf3radiusTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3cy Tff7b72+ Te6edf3lnTb4b4b4.Te6edf3y1 Tff7b72* Te6edf3plTb4b4b4.Te6edf3radiusTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3cz Tff7b72+ Te6edf3lnTb4b4b4.Te6edf3z1 Tff7b72* Te6edf3plTb4b4b4.Te6edf3radiusTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3cx Tff7b72+ Te6edf3lnTb4b4b4.Te6edf3x2 Tff7b72* Te6edf3plTb4b4b4.Te6edf3radiusTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3cy Tff7b72+ Te6edf3lnTb4b4b4.Te6edf3y2 Tff7b72* Te6edf3plTb4b4b4.Te6edf3radiusTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3cz Tff7b72+ Te6edf3lnTb4b4b4.Te6edf3z2 Tff7b72* Te6edf3plTb4b4b4.Te6edf3radiusTb4b4b4,
Te6edf3gcTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4,
Te6edf3gcTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4,
Te6edf3gcTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4,
Te6edf3gcTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4,
Tff7b72trueTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3cxTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3cyTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3czTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3radius
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3writeWorldSegTb4b4b4(
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
Te6edf3plTb4b4b4.Te6edf3cxTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3cyTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3czTb4b4b4,
Te6edf3plTb4b4b4.Te6edf3fillTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4,
Te6edf3plTb4b4b4.Te6edf3fillTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4,
Te6edf3plTb4b4b4.Te6edf3fillTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4,
Te6edf3dark Tff7b72? T79c0ff0.38 Tff7b72: T79c0ff0.42Tb4b4b4,
Tff7b72falseTb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff1
Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3EDGE_MATCH Tff7b72= T79c0ff0.75Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3srcEdgeCountTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3o Tff7b72= Te6edf3i Tff7b72* Te6edf3EDGE_STRIDETb4b4b4;
Tff7b72let Te6edf3ia Tff7b72= Tff7b72-T79c0ff1Tb4b4b4;
Tff7b72let Te6edf3ib Tff7b72= Tff7b72-T79c0ff1Tb4b4b4;
Tff7b72let Te6edf3da Tff7b72= Te6edf3EDGE_MATCHTb4b4b4;
Tff7b72let Te6edf3db Tff7b72= Te6edf3EDGE_MATCHTb4b4b4;
Tff7b72const Te6edf3x1 Tff7b72= Te6edf3srcEdgesTb4b4b4[Te6edf3oTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3y1 Tff7b72= Te6edf3srcEdgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff1Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3x2 Tff7b72= Te6edf3srcEdgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff2Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3y2 Tff7b72= Te6edf3srcEdgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff3Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3n Tff7b72= T79c0ff0Tb4b4b4; Te6edf3n Tff7b72< Te6edf3srcCountTb4b4b4; Te6edf3nTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3no Tff7b72= Te6edf3n Tff7b72* Te6edf3NODE_STRIDETb4b4b4;
Tff7b72const Te6edf3a Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Tb4b4b4(Te6edf3srcNodesTb4b4b4[Te6edf3noTb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72- Te6edf3x1Tb4b4b4, Tb4b4b4(Te6edf3srcNodesTb4b4b4[Te6edf3no Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72- Te6edf3y1Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3b Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Tb4b4b4(Te6edf3srcNodesTb4b4b4[Te6edf3noTb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72- Te6edf3x2Tb4b4b4, Tb4b4b4(Te6edf3srcNodesTb4b4b4[Te6edf3no Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72- Te6edf3y2Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3a Tff7b72< Te6edf3daTb4b4b4) Tb4b4b4{
Te6edf3da Tff7b72= Te6edf3aTb4b4b4;
Te6edf3ia Tff7b72= Te6edf3nTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3b Tff7b72< Te6edf3dbTb4b4b4) Tb4b4b4{
Te6edf3db Tff7b72= Te6edf3bTb4b4b4;
Te6edf3ib Tff7b72= Te6edf3nTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3ia Tff7b72< T79c0ff0 Tff7b72|| Te6edf3ib Tff7b72< T79c0ff0 Tff7b72|| Te6edf3ia Tff7b72=== Te6edf3ibTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3wa Tff7b72= Te6edf3worldTb4b4b4[Te6edf3iaTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3wb Tff7b72= Te6edf3worldTb4b4b4[Te6edf3ibTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3wa Tff7b72|| Tff7b72!Te6edf3wbTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3waTb4b4b4.Te6edf3planet Tff7b72!== Te6edf3wbTb4b4b4.Te6edf3planet Tff7b72|| Te6edf3waTb4b4b4.Te6edf3planet Tff7b72< T79c0ff0Tb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3pa Tff7b72= Te6edf3projectedTb4b4b4[Te6edf3iaTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3pb Tff7b72= Te6edf3projectedTb4b4b4[Te6edf3ibTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3pa Tff7b72&& Te6edf3pb Tff7b72&& Te6edf3paTb4b4b4.Te6edf3facing Tff7b72<= T79c0ff0 Tff7b72&& Te6edf3pbTb4b4b4.Te6edf3facing Tff7b72<= T79c0ff0Tb4b4b4) Tff7b72continueTb4b4b4;
Te6edf3writeWorldSegTb4b4b4(
Te6edf3waTb4b4b4.Te6edf3xTb4b4b4,
Te6edf3waTb4b4b4.Te6edf3yTb4b4b4,
Te6edf3waTb4b4b4.Te6edf3zTb4b4b4,
Te6edf3wbTb4b4b4.Te6edf3xTb4b4b4,
Te6edf3wbTb4b4b4.Te6edf3yTb4b4b4,
Te6edf3wbTb4b4b4.Te6edf3zTb4b4b4,
Te6edf3srcEdgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff4Tb4b4b4]Tb4b4b4,
Te6edf3srcEdgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff5Tb4b4b4]Tb4b4b4,
Te6edf3srcEdgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff6Tb4b4b4]Tb4b4b4,
Te6edf3srcEdgesTb4b4b4[Te6edf3o Tff7b72+ T79c0ff7Tb4b4b4] Tff7b72|| T79c0ff0.45Tb4b4b4,
Tff7b72falseTb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff1
Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3layoutScale Tff7b72= Te6edf3planetsTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72? Te6edf3planetsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3layoutScale Tff7b72: Te6edf3LAYOUT_SCALE_FLOORTb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3nodesTff7b72: Te6edf3nodeScratchTb4b4b4.Te6edf3subarrayTb4b4b4(T79c0ff0Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3nodeNeedTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3edgesTff7b72: Te6edf3edgeScratchTb4b4b4.Te6edf3subarrayTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3w Tff7b72* Te6edf3EDGE_STRIDETb4b4b4)Tb4b4b4,
Te6edf3pickTb4b4b4,
Te6edf3projectedTb4b4b4,
Te6edf3planetsTb4b4b4,
Te6edf3layoutScaleTb4b4b4,
Te6edf3homeByIdTff7b72: Te6edf3assignedTb4b4b4.Te6edf3homeByIdTb4b4b4,
Te6edf3orbitTb4b4b4,
Te6edf3cameraTff7b72: Tb4b4b4{ Te6edf3xTff7b72: T79c0ff0Tb4b4b4, Te6edf3yTff7b72: T79c0ff0Tb4b4b4, Te6edf3zoomTff7b72: T79c0ff1 Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72export Tff7b72function Te6edf3pickPlanetNodeTb4b4b4(Te6edf3pickTb4b4b4, Te6edf3cssXTb4b4b4, Te6edf3cssYTb4b4b4, Te6edf3pad Tff7b72= T79c0ff10Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3pickTb4b4b4) Tff7b72|| Tff7b72!Te6edf3pickTb4b4b4.Te6edf3lengthTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72let Te6edf3best Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72let Te6edf3bestD Tff7b72= Tff7b72InfinityTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3pickTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3n Tff7b72= Te6edf3pickTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3d Tff7b72= Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Tb4b4b4(Te6edf3nTb4b4b4.Te6edf3sx Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72- Te6edf3cssXTb4b4b4, Tb4b4b4(Te6edf3nTb4b4b4.Te6edf3sy Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72- Te6edf3cssYTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3hit Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3nTb4b4b4.Te6edf3size Tff7b72|| T79c0ff10Tb4b4b4, Te6edf3padTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3d Tff7b72<= Te6edf3hit Tff7b72&& Te6edf3d Tff7b72< Te6edf3bestDTb4b4b4) Tb4b4b4{
Te6edf3bestD Tff7b72= Te6edf3dTb4b4b4;
Te6edf3best Tff7b72= Te6edf3nTb4b4b4.Te6edf3idTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3bestTb4b4b4;
Tb4b4b4}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────